Microsoft MVP성태의 닷넷 이야기
The JIT does dead-code elimination in Debuggable code [링크 복사], [링크+제목 복사],
조회: 8711
글쓴 사람
정성태 (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)
398정성태8/12/200610409Debug : 4. SOS로 Managed 객체의 크기 구하는 방법
397정성태8/12/200611048IIS - 4. Extending the TreeView in IIS 7 in Windows Vista파일 다운로드1
396정성태8/11/200610296TFS : 21. Process Template Schemas Download
395정성태8/10/200610162개발환경 구성 : 21. Introduction to Visual Studio 2005 Team System Guide
394정성태8/10/200612182개발환경 구성 : 20. VHD 파일 크기 줄이기파일 다운로드1
392정성태8/9/200610189개발환경 구성 : 19. 몇 가지 유용한 ASP.NET 아티클 링크
393정성태8/10/20069919    답변글 개발환경 구성 : 19.1 몇 가지 유용한 ASP.NET 아티클 링크
391정성태8/9/20069620개발환경 구성 : 18. CardSpace 구현 예제파일 다운로드1
390정성태8/9/20069330개발환경 구성 : 17. 주의해야 할 프로그래밍 패턴
389정성태8/8/200614690C# event 와 delegate 의 차이?파일 다운로드1
388정성태8/7/20069186.NET : 10. C# 3.0 소식
387정성태10/20/20069962Vista : 7. System Services change in Windows Vista
385정성태10/20/200610507.NET 3.0 : 2. WCF Service with .asmx extentions 파일 다운로드1
384정성태10/20/200610298Vista : 6. Programming the Windows Vista Event Log [1]
383정성태10/20/200610389Vista : 5. MSDE Will Not Be Supported on Vista
382정성태10/20/200612633Vista : 4. IE 7+ 이름 변경
381정성태8/7/20069147개발환경 구성 : 16. Windows RSS API 사용법파일 다운로드1
380정성태8/4/20069143개발환경 구성 : 15. Windows Command Line Auto Completion
379정성태8/1/20068662.NET : 9. Self compiling scripts for .NET languages: C#, VB.NET and JScript.NET파일 다운로드1
378정성태8/1/20069123개발환경 구성 : 14. [사용설명서] SQL Server Everywhere 버전
377정성태7/31/20069267개발환경 구성 : 13. 도움말 생성기 - Sandcastle
386정성태8/7/20068999    답변글 개발환경 구성 : 13.1 Sandcastle 사용예파일 다운로드1
376정성태7/25/20068699TFS : 20. TFS 사용 현황 사례
375정성태7/25/20068772개발환경 구성 : 12. [CodePlex] 신규 프로젝트 - TFS File Sync
374정성태7/24/200610741Reflection 의 속도 향상을 원한다면?
373정성태7/23/20069950.NET : 8. The ADO.NET Entity Framework Overview [2]
... 31  [32]  33  34  35  36  37  38  39  40  41  42  43  44  45  ...