[C#] 이 명령어 포인터에서 사용할 수 없으므로 로컬 또는 인수의 값을 얻을 수 없습니다.

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에서 저에게 효과적이었습니다.

당신이해야 할 일은 ..

  1. 디버깅 할 수없는 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 프로젝트 속성으로 이동하십시오.
  3. 빌드 메뉴를 클릭하십시오.
  4. 고급 버튼을 클릭하십시오.
  5. 디버그 정보 드롭 다운 값을 전체로 설정하십시오.
  6. 프로젝트를 다시 빌드하십시오.

답변

방금 이것에 부딪 쳤고 Release빌드 구성 대신 빌드 구성 으로 실행 중이었습니다 Debug. Debug변수 로 다시 전환 하면 시계에 다시 표시됩니다.


답변

Visual Studio 2017에서 디버그-> 옵션으로 이동 한 다음 디버깅-> 일반->을 확인 하고이 옵션을 확인하십시오

관련 Visual Studio 2017 옵션


답변

동일한 문제에 직면했을 때 다시 빌드하기 전에 솔루션을 청소해야했습니다. 그것은 나를 위해 그것을 처리했다.