2012-08-14 105 views
3

我有一個調用外部.dll的Windows應用程序。過了一段時間,引起了我的注意的致命錯誤與用戶編組有關。網上有一個源代碼,那個特定的錯誤是我將目標更改爲x86而不是AnyCPU。我這樣做了,現在每當我讓應用程序運行時,它都會退出調試模式並使應用程序崩潰。但是,如果我在.dll調用之後立即設置了一箇中斷點,並逐步遍歷每一行,直到再次接收到應用程序的控制權,則它不會崩潰。有什麼具體的可能導致這個?有沒有一個調試這個問題?Windows應用程序在調試時不會崩潰,但崩潰否則

謝謝!

+0

嘗試在項目屬性中啓用非託管代碼調試並查看反彙編的代碼。祝你好運... – Mehrdad 2012-08-14 21:06:39

+0

崩潰處理方式的差異可以歸結爲[調試時窗口窗體處理異常的方式不同](http://stackoverflow.com/a/6734767/113141)? – Justin 2012-08-14 21:17:00

回答

1

解決問題的步進代碼通常是原始代碼中計時問題的症狀。如果外部資源異步加載,它將不會顯示在調試器中當前線程的堆棧上,但可以被調用。逐級代碼會導致流程中的延遲。

0

謝謝大家給你的建議!幸運的是,我最終完成了它的工作(對其工作原理了解最少),但將構建目標更改爲特定x86機器而不是「AnyCPU」。這是由網站建議,不能再找到:\希望這可以幫助其他人比遇到類似的問題!

0

我認爲這種事情最常見的原因是未初始化的變量。他們可以選擇內存中的任何內容,並且調試器的存在可以輕鬆更改堆棧中未使用部分的內容 - 在調用下一個例程時將成爲局部變量的內存。檢查DLL代碼。

請注意,您的「修復」讓我更懷疑這是真正的答案。

(再有就是也與調試出了問題真的瘋了的情況下。很久以前,我打在調試程序有沒有問題,加載無效值段寄存器或者如果你是單步執行的情況。)

相關問題