Microsoft MVP성태의 닷넷 이야기
The JIT does dead-code elimination in Debuggable code [링크 복사], [링크+제목 복사],
조회: 8679
글쓴 사람
정성태 (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)
422정성태9/8/200611010.NET : 13. An Introduction to LINQ
421정성태9/7/200610084Debug : 5. A reading list for debugging, .NET, CLR, WinDBG etc
420정성태9/7/200610302IIS - 5. IIS 7.0 RC1
419정성태9/3/200610823TFS : 30. MSF for Agile Software Development Process Guidance
418정성태9/3/200611288TFS : 29. MSF for CMMI® Process Improvement
417정성태9/3/200610993.NET : 12. DLINQ 관련 리소스
416정성태8/31/200610754개발환경 구성 : 23. TestDriven.NET by Jamie Cansdale TestDriven.NET 2.0.1761 - RC1
414정성태9/3/200611001개발환경 구성 : 22. Diagnosing SideBySide failures파일 다운로드1
413정성태10/20/200610734Vista : 8. What is the property system?
415정성태10/20/200611375    답변글 Vista : 8. Property System 사용 코드 예 [1]
423정성태10/20/200610300    답변글 Vista : 8. The source of property types파일 다운로드1
412정성태8/28/200610043TFS : 28. Finding the changes between two labels in TFS version control파일 다운로드1
411정성태8/27/200610252.NET : 11. [LINQ] Building and using a LINQ for SQL Class Library with ASP.NET 2.0파일 다운로드1
410정성태9/3/200610824TFS : 27. TFS Proxy 사용기
408정성태8/23/200610594TFS : 26. How do I build a Team Project with shared code?파일 다운로드1
407정성태8/23/200610344TFS : 25. Installing the Check for Comments Check-In Policy
405정성태8/20/200610305Threading in C#
406정성태8/22/20069521    답변글 .NET 쓰레드 관련 토픽 모음
403정성태8/15/200610172TFS : 24. Configuring Team Foundation Server to Use a Remote SharePoint Server [1]
402정성태8/13/200614789TFS : 23. 관련 웹 리소스들
404정성태8/15/20069039    답변글 TFS : 23.1 관련 MSDN 리소스들
401정성태8/12/20069589Visual C++ : 1. IJW ( It Just Works )파일 다운로드1
409정성태8/23/200610032    답변글 C++/CLI : 1. Interop 101 ? Part 2
400정성태8/12/200610881TFS : 22. VSTS Source Control Lock Types파일 다운로드1
399정성태8/12/200610452x64 : 1. 64bit 주소 지정이 아닌 32bit 변위값 지정
398정성태8/12/200610359Debug : 4. SOS로 Managed 객체의 크기 구하는 방법
... [31]  32  33  34  35  36  37  38  39  40  41  42  43  44  45  ...