Visual Studio 2010에서 "현재 메서드의 코드가 최적화되어 있으므로 식을 평가할 수 없습니다"


153

디버그 모드에서 Visual Studio 2010을 사용하고 있으며 "코드 최적화"를 선택하지 않았습니다. 디버거의 변수를 빨리 볼 수 없습니다. "현재 메소드의 코드가 최적화 되었기 때문에 표현식을 평가할 수 없습니다"라는 오류가 발생합니다.

int i = -3과 같은 행이라도 i에서 빠른 감시를 수행하면 "이 명령 포인터에서 로컬 또는 인수 'i'의 값을 얻을 수 없습니다. 최적화되지 않았기 때문일 수 있습니다."

비슷한 질문에 언급 된 이 링크 는 적용되지 않는 것 같습니다.

누락 된 설정이 있습니까?


4
torulflundgren.blogspot.com.au/2010/03/… 이것이 내가 찾은 최고의 솔루션입니다. 나는 이것을 비주얼 스튜디오 2013에서 테스트했다. 그리고 일했다 ....
Dulanjana Wickramatantri

답변:


167

프로젝트가 디버그 모드에 있었지만 해결책은 없었습니다. 내가 그것을 바꾸었을 때 효과가있었습니다.


9
VS2012 에서이 문제가 있었지만 솔루션과 모든 프로젝트가 최적화없이 디버그로 설정되었습니다. 나는 솔루션을 청소 / 재구성하여 나를 위해 고쳤다.
saarp

20
그렇다면 ... 솔루션을 비 디버그 모드로 어떻게 설정합니까?
user1431072

user1431072-솔루션 또는 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 디버그 모드로 설정할 수 있습니다
Yevgraf Andreyevich Zhivago

48

VS 2010을 사용할 때이 문제가 발생했습니다. 솔루션 구성에서 (디버그)를 선택했습니다. 프로젝트 속성에서 코드 최적화 속성을 선택 취소하여이 문제를 해결했습니다. 프로젝트 (오른쪽 클릭) => 속성 => 빌드 (탭) => 코드 최적화를 선택 취소하십시오.


29

최적화 된 상자를 선택하지 않아도 최적화 / 릴리스 빌드를 디버깅하는 것처럼 들립니다. 시도 할 수있는 것은 다음과 같습니다.

  • 솔루션 파일을 완전히 다시 작성하십시오 (솔루션을 마우스 오른쪽 단추로 클릭하고 모두 다시 작성을 선택하십시오).
  • 디버깅하는 동안 모듈 창 (디버그-> Windows-> 모듈)을 열고로드 된 모듈 목록에서 어셈블리를 찾으십시오. 로드 된 어셈블리에 대해 나열된 경로가 원하는 경로인지, 파일의 수정 된 타임 스탬프가 어셈블리가 실제로 재 빌드되었음을 표시하는지 확인하십시오.
  • 모듈 창은 또한로드 된 모듈의 최적화 여부를 알려줍니다. 모듈 창에 최적화되지 않았 음을 표시해야합니다.

디버그-> Windows 메뉴에 모듈 메뉴 항목이 표시되지 않으면 "사용자 정의 ..."메뉴에 추가해야합니다.


2
솔루션이 재 구축되었습니다. 모듈 창은 어셈블리가 최적화되었음을 보여줍니다. 최적화 확인란이 선택되어 있지 않으므로 어셈블리가 항상 최적화되는 이유를 모르겠습니다. 솔루션에는 웹 프로젝트가 있지만 내가보고있는 코드는 디버그 모드의 클래스 라이브러리 프로젝트에 있습니다.
Tony_Henrich 7:10에

@Tony-바보 같은 질문이지만 클래스 라이브러리에 "최적화"체크 상자가 선택 해제되어 있습니까?
Justin

예. 나는 내 질문 에이 사실을 언급했다. 나는 이미 내 자신의 질문에 대답했다.
Tony_Henrich 16:10에

1
내는 Project.Web최적화가 선택 해제 나는 그것의 어셈블리를 볼 때 최적화로 아직 여전히 쇼를 Debug > Modules:(
J86

VS가 디버깅 정보를 업데이트하도록 강제하는 유일한 방법은 옵션이 선택되지 않은 상태에서 여전히 최적화 된 것으로 간주되는 모듈의 어셈블리 버전을 늘리는 것입니다.
alphanoch

14

VS2013에서 도구-> 옵션-> 디버깅-> 일반으로 이동하여 '관리되는 호환성 모드 사용'을 활성화하십시오. 새로운 기능 평가 동작을 비활성화합니다.


감사! 제공된 다른 솔루션 중 이것이 나에게 중요한 솔루션이었습니다. 이상한 일이 갑자기 일어났다는 것이 무슨 일인지 궁금합니다.
squid808

10

디버그 모드에서 실행 해보십시오. 릴리스 모드에서 실행중인 경우이 메시지가 표시됩니다.


5
"디버그 모드에서 Visual Studio 2010을 사용하고 있으며"코드 최적화 "를 선택하지 않았습니다."...이 비 응답을 삭제해야합니다.
Jim Balter

진심으로. 그는 디버그에서 실행 중이라는 질문에 말합니다. 나는 왜 공감대를 얻지 못한다. 이 답변은 가능한 해결 방법을 오염시킵니다
John Demetriou

1
FWIW,이 오류 메시지를 검색하면이 질문이 Google에서 높은 순위를 차지합니다. 이 답변은 나에게 맞습니다 (릴리스 모드에 있다는 것을 몰랐습니다).
Nate Barbettini

그는 둘 이상의 어셈블리를 가질 수 있으며 구성 관리자에서 디버깅중인 어셈블리를 릴리스 또는 sth로 설정할 수 있습니다.
madoxdev

8

내 상황은 위의 답변 중 어느 것도 다루지 않았습니다. : 나는 다음과 같은 발견 은 MSDN 문서 때 붙어 일부 원시 기본 스레딩 작업에 디버거가 데이터에 액세스 할 수 있다고 설명 스레딩을. 예를 들어, 스레드가 Task.Wait ()에 앉아 있으면 이것이 나타납니다.


8

나는 같은 문제가 있었다. 그러나 제 경우에는 Debuggable속성이 AssemblyInfo.cs내 프로젝트 파일에 하드 코딩되어 컴파일로 덮어 쓰지 않았습니다. Debuggable속성을 지정하는 행을 제거한 후 작동했습니다 .


8

나를 위해 VS2017과 VS2019에서 발생했습니다. "모듈로드시 JIT 최적화 억제"옵션을 선택한 후 발생이 중지되었습니다.

여기에 이미지 설명을 입력하십시오


+1, 이것은 내 문제의 원인이었습니다. 구성이 "디버그"로 끝날 때 XML에서 최적화를 해제했기 때문에 VS는 실제로 csproj 옵션을 이해하는 데 너무 좋지 않습니다. MSBuild를 직접 호출 할 때 제대로 작동하지만 VS 자체에서는 제대로 작동하지 않습니다.
TheBeardedQuack

5

VS2008에서도 같은 문제가있었습니다. 제 경우에는 솔루션 재구성을 통해 해결되었습니다.


4

@Kragen 외에도 웹 프로젝트를 디버깅하는 경우

Visual Studio를 닫고 C : \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET 파일에서 임시 파일을 삭제하십시오.


솔루션에는 웹 프로젝트가 있지만 코드는 클래스 라이브러리 프로젝트에 있습니다. 임시 파일을 여러 번 삭제했습니다.
Tony_Henrich

4

또 다른 방법은 최적화 된 dll과 이름은 같지만 ini 확장자를 가진 파일을 만들고 다음을 추가하는 것입니다.

[.NET Framework 디버깅 제어]
GenerateTrackingInfo = 1
AllowOptimize = 0

이것은 JIT에게 변수를 최적화하지 않도록 지시합니다.

여전히 pdb가 필요하므로 다음과 같이 끝날 것입니다. yourDll.dll yourDll.pdb yourDll.ini

디버그 옵션을 사용하여 dll을 다시 생성 할 수없는 시나리오에서 특히 효과적입니다.

http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx


4

당신이 "볼 때 현재 메소드의 코드가 최적화되어 있기 때문에 식을 계산할 수 없습니다. 실행 한 후"메시지가 Debugger.Break()문을 다음 당신이 다음 문 단계에 F10을 눌러 확인하십시오.

다음 문장으로 넘어가 디버그 빌드를 실행한다고 가정하면이 메시지가 사라집니다.


2
그거였다. 위의 모든 해결책을 시도해
보았고이

안돼 작동하지 않았다. Vs17 아직도 내가 릴리스 빌드를 디버깅하고 생각
존 데 메트

3

"코드 최적화"속성이 확인되지 않은 문제와 관련하여 코드는 여전히 최적화 된 상태로 컴파일됩니다. 모든 것을 시도한 후에 마지막으로 도움이 된 것은 동일한 설정 페이지 (프로젝트 속성-디버그)에서 "관리되지 않은 코드 디버깅 사용"확인란을 선택하는 것입니다. 코드 최적화와 직접 관련이 없지만이 기능을 사용하면 VS가 더 이상 내 라이브러리를 최적화하지 않으므로 디버깅 할 수 있습니다.


3

테스트 베드 웹 앱에서 클래스 라이브러리를 디버깅하는 동안 동일한 문제가 발생했습니다. 테스트 베드에서 릴리스 버전을 참조하고 있으며 클래스 라이브러리 속성에서 최적화되도록 설정되었습니다.

클래스 라이브러리 속성에서 릴리스 버전에 대한 최적화 코드 확인란을 선택 취소하면 문제가 해결됩니다.


고마워요 모든 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "속성"메뉴를 선택한 다음 "빌드"탭을 선택하면이 확인란을 찾을 수 있습니다.
goamn

3

나는 이것이 나중에 대답한다는 것을 알고 있지만 앞으로 다른 사람들을 도울 수있는이 문제를 해결하는 방법에 대한 또 다른 참조를 찾았습니다. 이 웹 페이지 는 최적화를 방해하는 환경 변수 (COMPLUS_ZapDisable = 1) 설정에 대해 설명합니다. (Visual Studio 호스팅 프로세스를 비활성화하는 두 번째 부분을 잊지 마십시오.) 필자의 경우 심볼 서버를 통해 외부 DLL을 디버깅했기 때문에 더 관련이 있었을 수도 있지만 확실하지 않습니다.


3

Visual Studio와 MonoDevelop 사이에 있었으며 아마도 후자에서 시작된 F # 프로젝트 에서이 문제가 발생했습니다. VS에서는 최적화 상자가 선택 해제되었지만 디버거에 관한 한 최적화가 확실히 발생하는 것처럼 보입니다.

프로젝트 파일의 XML과 정상적인 파일의 XML을 비교 한 후 문제는 분명했습니다. 건강한 프로젝트에는 명확한 <optimize>false</optimize>선이 있지만 나쁜 프로젝트에는 완전히 누락되었습니다. VS는 컴파일러가 그 반대를 수행하는 동안 최적화가 비활성화되었다는 사실을 분명히 추론했습니다.

해결책은이 속성을 프로젝트 파일에 추가하고 다시로드하는 것이 었습니다.


1

Visual Studio 2017로 마이그레이션 할 때이 메시지를 받기 시작했습니다.이 페이지에 나와있는 아이디어 중 어느 것도 효과가 없었습니다. 다른 게시물 에서이 제안을 발견했으며 작동했습니다-제거하십시오.

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

... AssemblyInfo 파일에서.


@Crazy Cat을 사랑합니다. VS2019로 마이그레이션 할 때 나에게 일어났습니다.
Antonio Rodríguez

0

VS 2010에서도 같은 문제가 발생했습니다. 솔루션을 정리하고 다시 작성하면 효과가 있습니다.


0

위의 vickramds의 의견은 http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html을 참조하여 나를 위해했습니다. 모든 것을 확인했습니다-모든 dll, 로컬 bin 폴더에서 pdb 파일을 삭제하고, Clean, Rebuild, Temporary ASP.NET Files의 모든 폴더를 지우고, TRACE / DEBUG 플래그가 설정되었는지 확인하고, DLL 경로를 확인하십시오.

영향을받는 프로젝트에 대해 잃어 버리지 않도록 내려 놓으려면 :

프로젝트 속성-> 빌드-> 고급-> 디버그 정보 : 전체.

물론 다른 의도가없는 한, 디버그 구성을 선택하기 전에이 구성을 선택했는지 확인하려고합니다.


0

ASP.NET 프로젝트를 디버깅하려는 경우 프로젝트의 속성> 웹> 서버 드롭 다운이 "IIS Express"로 설정되어 있는지 확인하십시오 (여기의 모든 항목 확인).


0

디버그 구성 (VS 2017 모듈 창에서 볼 수 있음)에도 최적화 된 c ++ / cli mfc 확장 dll을 혼합했습니다. 이전 답변에서 제안한 것처럼 "VS2013에서는 도구-> 옵션-> 디버깅-> 일반으로 이동하여 '관리되는 호환성 모드 사용'을 활성화하십시오. 그러면 새로운 기능 평가 동작이 비활성화됩니다." 해당 설정은 VS 2017에서도 찾을 수 있습니다.

그러나 충분하지 않았으므로 다른 MFC 응용 프로그램의 프로젝트 파일에서 확장 dll 프로젝트 파일로 UseDebugLibraries 설정을 복사했습니다.

    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
      ...
      <UseDebugLibraries>true</UseDebugLibraries>

그런 다음 다시 빌드하면 문제가 해결되었습니다.


0

Visual Studio 2012에서는 Tools> Debugging> Just-In-Time 에서 " Managed "옵션을 활성화 했습니다.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.