Microsoft MVP성태의 닷넷 이야기
The JIT does dead-code elimination in Debuggable code [링크 복사], [링크+제목 복사],
조회: 14111
글쓴 사람
정성태 (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/200614285Introduction to the MSN Messenger Activity SDK
212정성태4/13/200616224FIN_WAIT_2 상태에 대하여
211정성태4/13/200614894Override CLR Assembly Probing Logic
210정성태4/13/200615313Web.config의 기본 <appSettings /> Handler 교체
209정성태3/25/200615051Win32 FileID API Library
208정성태4/13/200614600(거의)모든 DB 에 대한 ADO.NET Data Provider (유료)목록
205정성태4/13/200614830Static Code Analyzer
206정성태4/13/200614391    답변글 Visual C++ Express를 사용한 보안 응용 프로그램 빌드
203정성태4/13/200614258WGF (Windows Graphic Foundation) [1]
202정성태4/13/200614300사용자 컴퓨터 환경 조사 결과(외국 사례)
201정성태4/13/200619976MySQLDirect .NET Data Provider
207정성태4/13/200613714    답변글 무료: Download Connector/Net 1.0 (MySQL) [1]
200정성태4/13/200614238Understanding Classic COM Interoperability With .NET Applications파일 다운로드1
199정성태4/13/200614832How to get a V2.0 ICorDebug object
198정성태4/13/200614689Whidbey breaking change --- Caching binding failures [1]
197정성태4/13/200614111The JIT does dead-code elimination in Debuggable code
195정성태4/13/200613892910442 - Working with Web Resources in ASP.NET 2.0
194정성태4/13/200614492ASP.NET 2.0 WebPart - SQL Server Error 26: Error Locating Server/Instance Specified
193정성태4/13/200614447WCF - Breaking Changes between Jan CTP and Feb CTP파일 다운로드1
192정성태4/13/200613934Cassini Update
191정성태4/13/200615019LeechBlocker ISAPI Filter
189정성태4/13/200614115The New Anonymous Types Feature in C# 3.0 [1]
188정성태3/8/200614344Microsoft Anti-Cross Site Scripting Library V1.0
196정성태4/13/200613670    답변글 왜 사용해야 하는가?
187정성태4/13/200613635제 1회 INETA 세미나
186정성태4/13/200614256Internet Information Services (IIS) 6.0 Manager for Windows XP
... 31  32  33  34  35  36  37  38  [39]  40  41  42  43  44  45  ...