문제

Visual Studio 또는 MDBG를 통해 MSIL을 실행합니다.

MSIL 스택의 내용을 표시하는 방법이 있습니까?

예를 들어 LDLOC "일부 변수"를 실행하면 스택을보고 변수가 스택에 있음을 알 수있는 방법이 있습니까?

MSIL 스택은 CPU 스택과 같지 않다고 가정합니다.

도움이 되었습니까?

해결책

런타임에는 실제로 "MSIL"스택이 없습니다. 디버그 모드에서도 실행 된 코드는 항상 JIT 컴파일됩니다. JIT를 컴파일하는 프로세스는 MSIL을 가상 스택 머신에서 실행중인 플랫폼의 일반 어셈블리 코드로 "평평"합니다. 그것의 의미는 ldloc.0 결국 같은 것으로 번역 될 수 있습니다 mov eax, [sp + 4], 값이 이미 레지스터에 누워있는 경우, 또는 NO-OP. 특정 명령을 디버깅하려는 경우 ldloc, 그런 다음 LDOLOC가 무엇을 번역했는지와 실제로 데이터를로드하는 위치를 확인하려면 분리에서 그것을 살펴 봐야합니다.

WINDBG + SOS 도구 (다른 게시물에 언급)가 도움이됩니다. 관리 코드 관점에서 CPU 스택을보십시오. 그러나 볼 수있는 것이 없기 때문에 "MSIL"스택을 볼 수는 없습니다.

다른 팁

WindBG + SOS를 사용하여 그렇게 할 수 있습니다. 확인하다 이 질문 Windbg 사용 방법에 대한 참조.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top