2010-08-20 2 views

답변

6

확인할 방법 중 하나는 조립품에서 DebuggableAttribute (doc)을 보는 것입니다. DisableOptimizations 플래그는 C# 컴파일러가/optimize 옵션을 전달한 경우 설정되지 않습니다.

참고 : 대부분의 시나리오에서 작동하지만 이것이 100 % 어리석은 해결책은 아닙니다. 그것은 사용자의 손이 DebuggableAttribute이는 C# 컴파일러는 을 정의하는 것보다 우선합니다 정의하는 경우 최적화

  • 에 대해 서로 다른 의미를 가지고 다른 언어로 컴파일 그것은 적어도 다음과 같은 방법으로
    1. 를 나눌 수 있습니다 Ildasm.exe를 가진 어셈블리 매니페스트에서
  • +0

    1. 문제는 C# 어셈블리에 관한 것이기 때문에 문제는 아니지만 2. 여전히 유효합니다 (사용자가 속성을 무시하면 런타임 최적화가 제거되어 어셈블리가 최적화되지 않은 것으로 생각 되나요?) – Zaki

    +0

    @Zaki 예/아니요. JIT 최적화가 비활성화되지만 다른 C# 컴파일러 최적화는 활성화되지 않습니다. – JaredPar

    +1

    /optimize ==/optimize- –

    3

    이 게시물은 http://www.panopticoncentral.net/archive/2004/02/03/267.aspx

    특히, ILDASM에서, 당신은 DebuggableAttribute를하고 NOP를의 부재를 찾을 수 있습니다 도움이 될 수 있습니다.

    +0

    해당 정보는 VB.Net 컴파일러에만 해당됩니다. 그것은 C#과 매우 유사하지만 약간 다른 의미를 가지고 있습니다. – JaredPar

    5

    봐 : 릴리스 버전의

    // --- The following custom attribute is added automatically, do not uncomment ------- 
        // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(
          valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) 
          = (01 00 02 00 00 00 00 00) 
    

    . 디버그 빌드 값은 (01 00 07 01 00 00 00 00

    입니다. 또 다른 주름은 디버거가 JIT 최적화기를 비활성화 할 수 있다는 것입니다. VS, 도구 + 옵션, 디버깅, 일반, "모듈로드에서 JIT 최적화 억제"의 구성 가능한 옵션입니다. 릴리스 빌드를 디버깅하고 비슷한 성능을 원한다면이 기능을 꺼야합니다. 디버깅이 더욱 어려워지고, 옵티 마이저가 다시 정렬되고 코드가 인라인 될 때 ​​스테핑이 이상하게 작동하고 CPU 레지스터에 저장되기 때문에 로컬 변수의 값을 검사 할 수없는 경우가 있습니다.

    +0

    내가 C#을 "코드 최적화"로 설정하고 디버그에서 다시 빌드하면 참조하는 디버그 값이 계속 표시됩니다. // 다음 사용자 지정 특성이 자동으로 추가되며 ------- // .custom instance void [mscorlib] System.Diagnostics.DebuggableAttribute ::. ctor (valueetype [mscorlib] System .Diagnostics.DebuggableAttribute/DebuggingModes) = (01 00 07 01 00 00 00) – John

    +0

    방금 ​​VS2012로 다시 확인했습니다. 아니, 아직 내가 설명한 것처럼 작동합니다.옵션을 변경 한 후 다시 빌드하는 것을 잊지 마십시오. –

    +0

    감사합니다. 귀하의 설명과 일치하는 코드가 최적화되지 않았을 때 위에서 설명한 내용을 얻었지만, 릴리스 모드에서 기본적으로 설정되어 최적화 된 경우 매니페스트의 디버그 특성에 대한 언급이 전혀 없습니다. 네, 위의 제 성문과 상충됩니다, 사과드립니다. 계속 어셈블리를보고 언급 한 빌드 값으로 DebuggableAttribute를 볼 수 있는지 확인합니다. 코드가 최적화되도록 설정된 경우입니다. VS2010입니다. 감사. – John

    관련 문제