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