1
我得到一個訪問衝突錯誤在非託管的DLL我寫這封信,但是當我嘗試調試它在C#應用程序只會得到Visual Studio的調試調用堆棧的最後一幀窗口。非託管調用堆棧
我有調試 - >異常 - > 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中,但讓我都在那裏我啓用微軟符號的方式。
,使我堆棧跟蹤看起來更像是這樣的:
myunmanaged.dll!ViolatingFunc()
- - - -
myunmanaged.dll!SomeFunc2()
- - - -
myunmanaged.dll!SomeFunc()
- - - -
[managed to unmanaged code transition]
- - - -
somecsharp.exe!com.somewhere.Form1.CallFuncThatCallsViolator();
它最好加載調試符號爲好,從Microsoft符號服務器,有時調用堆棧看起來很糟糕,直到你這樣做。 – 2012-01-18 18:45:25
@ChrisO這是一個很好的觀點。我會將其添加到答案中。 – linuxuser27 2012-01-18 18:48:18
是否選中「啓用非託管代碼調試」?已經設置爲我,我可以看到哪裏發生問題的框架,但我不能看到比最後託管調用 – 2012-01-18 18:48:59