Visual Studio 2010은 안전하지 않은 블록에서 함수의 인수 중 하나에서 데이터를 제거합니다 (다른 단어는 없음). 이 오류의 원인은 무엇입니까? 다음 메시지는 디버거에 의해 표시됩니다.
Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.
Visual Studio 2010은 안전하지 않은 블록에서 함수의 인수 중 하나에서 데이터를 제거합니다 (다른 단어는 없음). 이 오류의 원인은 무엇입니까? 다음 메시지는 디버거에 의해 표시됩니다.
Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.
답변:
프로젝트 속성으로 이동하여 빌드에서 "코드 최적화"체크 상자가 선택 해제되어 있는지 확인하십시오.
또한 고급 옵션 (빌드 탭 아래)에서 "디버그 정보"드롭 다운을 "전체"로 설정하십시오.
VS 2015 Community Edition에서도
디버그-> 옵션 또는 도구-> 옵션으로 이동하십시오.
모듈로드에서 디버깅-> 일반-> JIT 최적화 억제 (관리 전용)를 확인하십시오.
최적화가 활성화 된 상태에서 컴파일하면 많은 변수가 제거됩니다. 예를 들면 다음과 같습니다.
SomeType value = GetValue();
DoSomething(value);
여기서 로컬 변수 value
는 일반적으로 스택에 값을 유지하면서 제거됩니다.
DoSomething(GetValue());
또한 반환 값 이 전혀 사용되지 않으면 "stloc"을 통해 로컬에 저장되지 않고 "pop"을 통해 삭제되고 로컬은 존재하지 않습니다.
이 때문에, 그러한 빌드에서 디버거는 존재하지 않기value
때문에 현재 값을 얻을 수 없습니다.- 와 사이의 짧은 순간에 대해서만 존재합니다 .GetValue()
DoSomething(...)
그래서; 디버그하고 싶다면 릴리스 빌드를 사용하지 마십시오! 또는 디버깅하는 동안 최적화를 비활성화하십시오.
http://www.guntucomputerhacks.blogspot.com.au/2014/07/cannot-obtain-value-of-local-or.html
이것은 Visual Studio 2013에서 저에게 효과적이었습니다.
당신이해야 할 일은 ..
방금 이것에 부딪 쳤고 Release
빌드 구성 대신 빌드 구성 으로 실행 중이었습니다 Debug
. Debug
변수 로 다시 전환 하면 시계에 다시 표시됩니다.
"코드 최적화"속성이 확인되지 않은 문제와 관련하여 코드는 여전히 최적화 된 상태로 컴파일됩니다. 모든 것을 시도한 후에 마지막으로 도움이 된 것은 동일한 설정 페이지 (프로젝트 속성-디버그)에서 "관리되지 않은 코드 디버깅 사용"확인란을 선택하는 것입니다. 코드 최적화와 직접 관련이 없지만이 기능을 사용하면 VS가 더 이상 내 라이브러리를 최적화하지 않으므로 디버깅 할 수 있습니다.
Enable unmanaged code debugging
. 이 Enable native code debugging
검사를 시도했지만 아무런 차이가 없었습니다.
Azure 웹 사이트의 웹앱을 디버깅 할 때이 문제가 발생하는 사람들을위한 추가 답변 :
예를 들어 GitHub에서 배포 할 때 코드는 Azure 서버 최적화로 컴파일됩니다. 기본적으로 됩니다.
서버를 다음과 같이 설정 SCM_BUILD_ARGS
하여 디버깅 가능한 방식으로 컴파일하도록 지시합니다./p:Configuration=Debug
그러나 더 많은 옵션이 있습니다. 참조 : http://azure.microsoft.com/blog/2014/05/08/introduction-to-remote-debugging-on-azure-web-sites-part-3-multi-instance-environment-and-git /
나는 같은 문제가 있었다. 위의 모든 것을 시도하고 내 프로젝트의 {PROJECT_ROOT} \ bin \ Release \ netcoreapp2.2 및 {PROJECT_ROOT} \ obj \ Release \ netcoreapp2.2 내부의 모든 항목도 삭제해야한다는 것을 알았습니다. Azure Web App에서 배포 도구 / 비트 버킷을 사용하더라도 실제로 배포 된 파일을 검사하기 위해 빌드 >> 게시 >> 게시를 시도했기 때문에 게시와 관련이있었습니다.
WPF 응용 프로그램에서 이전에 동일한 문제가 있었으며 여기에있는 모든 솔루션으로 문제가 해결되지 않았습니다 . 문제는 모듈이 이미 최적화되어 다음 솔루션이 작동하지 않거나 문제를 해결하기에 충분하지 않다는 것입니다.
모듈은 여전히 최적화되어 있습니다. 다음 스크린 샷을 참조하십시오 :
이 문제를 해결하려면 최적화 된 모듈을 삭제해야합니다. 최적화 된 모듈 경로를 찾으려면 Process Hacker 와 같은 도구를 사용할 수 있습니다 .
" 프로세스 패널 " 에서 프로그램을 두 번 클릭 한 다음 새 창에서 " .NET 어셈블리 " 탭을 엽니 다 . 그런 다음 " 기본 이미지 경로 " 열에 모든 최적화 된 모듈 경로가 있습니다. 최적화를 해제 하고 폴더를 삭제하려는 폴더 를 찾으십시오 (아래 스크린 샷 참조). (명백한 이유로 회사 이름을 흐리게 표시했습니다)
1 단계의 확인란을 올바르게 선택 하여 응용 프로그램을 다시 시작 하면 작동합니다.
참고 : 다른 프로세스에서 파일 을 열었을 때 파일이 잠겨있 을 수 있습니다 . Visual Studio를 닫으십시오. 파일이 여전히 잠겨 있으면 Lock Hunter 와 같은 프로그램을 사용할 수 있습니다
Cannot obtain value of local or argument '<this>' as it is not available at this instruction pointer, possibly because it has been optimized away. System.Threading.Tasks.TaskExceptionHolder