Microsoft MVP성태의 닷넷 이야기
The JIT does dead-code elimination in Debuggable code [링크 복사], [링크+제목 복사],
조회: 8713
글쓴 사람
정성태 (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)
269정성태5/4/20069032Visual Studio 2005 Team System Level 200 Course Material
268정성태5/4/20069307Microsoft Component Installer Software Development Kit for Windows (x86) Version 2.0
267정성태5/4/20069208101 Code Samples for Visual Basic 2005
266정성태5/3/200611023Consolas Font Pack for Microsoft Visual Studio 2006 [2]
264정성태5/1/200610204Team System for C++ Developers
262정성태5/1/200619777Registry 등록 없이 COM 개체 사용 [1]파일 다운로드2
261정성태4/30/2006100424GB 메모리 인식 [2]
259정성태4/30/20069108Building ASP.NET 2.0 Web Sites Using Web Standards
260정성태4/30/20068815    답변글 XHTML Validator Modulle
258정성태4/29/20069395WebServiceStudio 2.0
263정성태5/1/20069037    답변글 Calling an Arbitrary Web Service
257정성태4/29/20069004TypeForwardedToAttribute
256정성태4/29/20069262Windows API - Using Condition Variables
252정성태4/26/20069477한글 관련 메세지 정리파일 다운로드1
251정성태4/26/20069933IIS 7.0 에서 소개되는 새로운 기능들 [1]
250정성태4/25/200610632툴 소개: VisualNDepend
249정성태4/25/200616625Integrating a debugger into Reflector
265정성태5/1/200610881    답변글 Deblector: First Version
285정성태5/15/20068985    답변글 New Deblector version ( an Add-In to debug with reflector )
248정성태4/21/20069332VS.NET 2005 Add-In : CSS Properties Window
247정성태4/21/20069259VS.NET 2005 Add-In : Spell Checker for HTML and ASP.NET pages
244정성태4/19/20069218SQL Server 2005 Service Pack 1
241정성태4/19/20068681VSTS Annotations for C++: Beyond Just Documenting Method Behavior [1]파일 다운로드1
240정성태4/18/20069316Accessing System Power and Network Status Using SENS
253정성태4/29/20069658    답변글 [HowToUse]: Accessing System Power and Network Status Using SENS
239정성태4/18/20069240Display a Web Page in a Plain C Win32 Application
... 31  32  33  34  35  36  [37]  38  39  40  41  42  43  44  45  ...