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