2012-01-18 4 views
1

작성한 관리되지 않는 DLL에서 액세스 위반 오류가 발생하지만 AC# 응용 프로그램에서 디버그하려고하면 Visual Studio의 디버그에서 호출 스택의 마지막 프레임 만 가져옵니다 창문.C# 응용 프로그램의 관리되지 않는 호출 스택

throw되는 디버거를 중단하도록 debug-> exceptions-> System.AccessViolationException을 설정했습니다.

myunmanaged.dll!ViolatingFunc() Line 100 + 0xc bytes 
- - - - 
[external code] //myunmanaged.dll!function that I want to see 
- - - - 
somecsharp.exe!com.somewhere.Form1.CallFuncThatCallsViolator(); 

데이터가 garbeldegook로 바뀌는 것을보기 위해 관리되지 않는 스택을 걷고 싶습니다. 이것이 가능합니까?

1 단계이지만, 모두가 방법 나는 마이크로 소프트 문자를 사용할 날 잡으려고 관리되지 않는 디버깅을 활성화 enter image description here

답변. 내 스택 추적을 만든

더 같이 :

myunmanaged.dll!ViolatingFunc() 
- - - - 
myunmanaged.dll!SomeFunc2() 
- - - - 
myunmanaged.dll!SomeFunc() 
- - - - 
[managed to unmanaged code transition] 
- - - - 
somecsharp.exe!com.somewhere.Form1.CallFuncThatCallsViolator(); 

답변

5

네, 그것은이다. '혼합 모드'로 애플리케이션을 디버깅해야합니다. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 '디버그'탭을 선택한 다음 '비 관리 코드 디버깅 사용'을 선택하십시오. 관리되는 프레임과 기본 프레임이 표시됩니다.

mixed mode debugging

편집 : ChrisO 언급으로하지 MS 기호를 가진 것은 이상한 디버깅 네이티브 할 수 있습니다. Windows 심볼의 기호 경로에 다음을 추가하십시오. http://msdl.microsoft.com/download/symbols

+1

그리고 Microsoft 기호 서버에서 디버그 기호를로드하는 것이 가장 좋으며 때로는 호출 스택이 너무 끔직하게 보일 때가 있습니다. –

+0

@ChrisO 좋은 지적입니다. 나는 그것을 그 대답에 추가 할 것이다. – linuxuser27

+0

"관리되지 않는 코드 디버깅 사용"확인란입니까? 문제가 발생한 프레임을 볼 수는 있지만 마지막 관리 전화보다 무슨 일이 있었는지 알 수 없습니다. –

관련 문제