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


비밀번호

댓글 작성자
 




... 16  17  18  19  20  21  22  23  24  [25]  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
575정성태1/4/200712954TFS : 62. Doing an Incremental Get in Team Build
574정성태1/4/200712886개발 환경 구성: 67. Visual Studio 2005 SP1 관련 자료 링크들
573정성태1/4/200713027.NET : 44. 빌드 번호 제한 - 65535
572정성태1/4/200712968Vista : 24. 비스타 관련 관리도구에 대해서.
571정성태1/4/200713270IIS : 7. 새로운 IIS 7의 ISAPI 프로그래밍 모델
570정성태1/3/200713272TFS : 61. IE 플러그 인 - 웹 버그를 TFS 에 전달
569정성태1/2/200711796Vista : 23. .NET 2.0 언어 팩 설치 문제
568정성태1/1/200713886개발 환경 구성: 66. 사용자 프로파일 로밍과 관련된 외부 자료
567정성태12/30/200614474.NET 3.0 : 10. WCF 관련 도구들
566정성태12/29/200614393.NET : 43. GlobalSuppressions.cs 파일이 뭐냐구요?
565정성태12/28/200613272.NET : 42. CAB (Composite UI Application Block) 관련 토픽들
563정성태12/23/200614193Vista : 22. BITSAdmin 툴
562정성태12/23/200612987IIS - 6. 스크립트 파일 동시 다운로드 처리
564정성태12/28/200613708    답변글 IIS - 6.1 이미지 파일 동시 다운로드 처리
561정성태12/22/200613474.NET : 41. Immutable 타입의 신비? TransactionScope 구현의 신비? [1]
560정성태12/19/200613520개발 환경 구성: 65. VS.NET 2005 SP1 - Enable property grid in Source view [1]
559정성태12/19/200613642Vista : 21. 비스타 사용자를 위한 12 가지 팁
558정성태12/18/200613601Vista : 20. 비스타에서만 사용가능한 Managed 기능들
557정성태12/15/200614299.NET : 40. Orcas - VB.NET에서도 Friend assembly 지원
556정성태12/14/200612749Vista : 19. DRM, EFS, BDE 기능
555정성태12/13/200613267개발 환경 구성: 64. Vista 와 Windows 2000 간의 MSDTC 동작 설정
554정성태12/13/200612974Vista : 18. 비스타 체험 지수(Windows Experience Index)를 알아내는 코드
553정성태12/13/200612538개발 환경 구성: 63. 비스타에서의 서비스 디버깅 방법
552정성태12/13/200612737개발 환경 구성: 62. IE 7에서의 DEP 지원 옵션
551정성태12/12/200613114개발 환경 구성: 61. &lt;xhtmlConformance mode="Legacy"/&gt; 사용에 대해.
550정성태12/11/200613760Vista : 17. 응용 프로그램 복구 및 재시작 시 콜백 함수 등록
... 16  17  18  19  20  21  22  23  24  [25]  26  27  28  29  30  ...