Microsoft MVP성태의 닷넷 이야기
The JIT does dead-code elimination in Debuggable code [링크 복사], [링크+제목 복사],
조회: 10879
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

출처: http://blogs.msdn.com/jmstall/archive/2006/03/13/dead_code_elimination.aspx

The JIT does dead-code elimination in Debuggable code

The desktop CLR JIT (at least x86) does dead-code elimination, even in debuggable code. This is obviously perfectly safe, transparent, (and good), from a program-execution perspective. But it can be a little surprising under the debugger because you can't set-next-statement (setip) to eliminated code.

In other words, if you have this C# code:
    Console.WriteLine("Hi!");
    if (false) {
        Console.WriteLine("Boo!"); // <-- can't setip here
    }
    Console.WriteLine("Bye");

You couldn't Set-next-statement to the "Boo!" line.  Normally this is fine, but every now and then it gets me. I think code-generators are more likely to produce code like that than a real person.

However, the JIT will not remove side-effect free expressions in debuggable code. For example,
    void Foo() {
        int x = 5;
        x ++;
    }

The JIT will not remove either of those lines, even though 'x' is unused and so they don't actually do anything for program behavior. This means you can still set and hit breakpoints on those lines, which is what you'd expect from debuggable (non-optimized) code.

In optimized-code, anything's fair game and a function like Foo() would very likely be optimized out of existence.

Published Monday, March 13, 2006 5:44 PM by jmstall

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

You can also stay up to date using your favorite aggregator by subscribing to the CommentRss Feed








[최초 등록일: ]
[최종 수정일: 4/14/2006]


비밀번호

댓글 작성자
 




... 31  32  33  34  35  36  37  38  [39]  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
213정성태4/13/200611121Introduction to the MSN Messenger Activity SDK
212정성태4/13/200613183FIN_WAIT_2 상태에 대하여
211정성태4/13/200611764Override CLR Assembly Probing Logic
210정성태4/13/200612183Web.config의 기본 <appSettings /> Handler 교체
209정성태3/25/200612035Win32 FileID API Library
208정성태4/13/200611550(거의)모든 DB 에 대한 ADO.NET Data Provider (유료)목록
205정성태4/13/200611681Static Code Analyzer
206정성태4/13/200611385    답변글 Visual C++ Express를 사용한 보안 응용 프로그램 빌드
203정성태4/13/200611094WGF (Windows Graphic Foundation) [1]
202정성태4/13/200611159사용자 컴퓨터 환경 조사 결과(외국 사례)
201정성태4/13/200616488MySQLDirect .NET Data Provider
207정성태4/13/200610640    답변글 무료: Download Connector/Net 1.0 (MySQL) [1]
200정성태4/13/200611149Understanding Classic COM Interoperability With .NET Applications파일 다운로드1
199정성태4/13/200611510How to get a V2.0 ICorDebug object
198정성태4/13/200611496Whidbey breaking change --- Caching binding failures [1]
197정성태4/13/200610879The JIT does dead-code elimination in Debuggable code
195정성태4/13/200610838910442 - Working with Web Resources in ASP.NET 2.0
194정성태4/13/200611462ASP.NET 2.0 WebPart - SQL Server Error 26: Error Locating Server/Instance Specified
193정성태4/13/200611509WCF - Breaking Changes between Jan CTP and Feb CTP파일 다운로드1
192정성태4/13/200610990Cassini Update
191정성태4/13/200612047LeechBlocker ISAPI Filter
189정성태4/13/200611234The New Anonymous Types Feature in C# 3.0 [1]
188정성태3/8/200611363Microsoft Anti-Cross Site Scripting Library V1.0
196정성태4/13/200610800    답변글 왜 사용해야 하는가?
187정성태4/13/200610743제 1회 INETA 세미나
186정성태4/13/200611307Internet Information Services (IIS) 6.0 Manager for Windows XP
... 31  32  33  34  35  36  37  38  [39]  40  41  42  43  44  45  ...