Microsoft MVP성태의 닷넷 이야기
The JIT does dead-code elimination in Debuggable code [링크 복사], [링크+제목 복사],
조회: 8623
글쓴 사람
정성태 (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]


비밀번호

댓글 작성자
 




1  2  3  4  5  6  7  8  9  [10]  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
950정성태4/24/200810564.NET : 78. Ajax View
949정성태4/24/200810401.NET : 77. Transactional NTFS - 관리 코드 래퍼
948정성태4/22/200810759TFS : 162. Sarbanes-Oxley 404 / Visual Studio Team System 2008
947정성태4/11/200810897TFS : 161. Web Access 2008 SP1 파워툴 2008년 4월 CTP
946정성태4/6/200812648.NET 3.5 : 41. 사용자 정의 LINQ Provider 제작파일 다운로드1
945정성태4/6/200810819VS.NET IDE : 42. Class Designer Powertoys (VS.NET 2008)파일 다운로드1
944정성태4/1/200812737Debug : 36. Visual C++ - 메모리 누수 코드 감지 [1]
943정성태3/28/200811560VS.NET IDE : 41. 라인수 세어주는 애드인
942정성태3/27/200810921Debug : 35. Managed Debug Assistants (MDAs)
941정성태3/25/200811609.NET : 76. 닷넷 코드 가이드라인
940정성태3/25/200811039Windows 2008 : 7. Microsoft: Hyper-V RC
939정성태3/25/200812117.NET 3.5 : 40. ASP.NET MVC 소스 코드 공개
938정성태3/25/200810887IIS : 23. IIS7 - Administration Pack [1]
937정성태3/25/200810852.NET : 75. PRISM - something like PResentation Integration SysteM.
936정성태3/25/200811758개발 환경 구성: 123. SPN(Service Principal Name)이 뭘까? [1]
935정성태3/25/200810880TFS : 160. BuildCop v1.0
934정성태3/25/200811671TFS : 159. TFS 프록시 서버 동작 방식
933정성태3/10/200811477TFS : 158. Process Template v4.2
932정성태3/5/20089953IIS : 22. IIS 7 관리자의 UI 확장
931정성태3/5/200810856.NET : 74. CAS 이야기 - Native Code 와 Link/Full Demand
930정성태3/2/200810701.NET : 73. Variable Capturing
929정성태3/1/200810758개발 환경 구성: 122. VS.NET 2008 용 PowerCommands 도구 [1]
928정성태3/1/200811410개발 환경 구성: 121. 설치된 Windows SDK 들 간의 선택을 간편하게 해주는 설정 도구 [1]
927정성태2/29/200811032개발 환경 구성: 120. Hyper-V와 Virtual PC/Server와의 VHD 호환성 [1]
926정성태2/29/200814105.NET 3.5 : 39. LINQ Providers
925정성태2/27/200811336TFS : 157. OpenGauntlet - Private Builds
1  2  3  4  5  6  7  8  9  [10]  11  12  13  14  15  ...