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