2011-06-09 182 views
2

我有一個應用程序,一旦編譯運行完全正常。但是,如果我在VB6環境中啓動它,它會不斷地和非常隨機地崩潰IDE,但只有當我對應用程序採取行動時(例如,將鼠標移動到其上,點擊某物,移動窗口等)。如何調試VB6崩潰?

該應用程序做了許多與VB6無關的事情:SIP,虛擬聲卡接口,音頻編碼/解碼等等......所以它可能是這樣的,但是崩潰似乎是隨機的。

崩潰總是發生在vba6.dll模塊中(至少這就是崩潰對話框所說的)。鑑於MS不再支持VB6,我能做些什麼來調試它?

我已經在XP和Win7上試了它,得到了相同的結果。

+0

我想你已經應用VB6服務包6?在VB6進程中是否存在可能造成危害的「外來」或未知DLL,如防病毒,附加組件,第三方等? – 2011-06-09 04:59:02

+0

@Simon Mourier是的,VB6 SP6。是的,一堆第三方組件。 – AngryHacker 2011-06-09 05:34:55

+0

也許你可以嘗試一個全新的安裝只有VB6,如果可能的話 – 2011-06-09 05:42:31

回答

3

很可能某些API/DLL函數與VB IDE不兼容。我們有時爲IDE和EXE編寫不同的代碼,我們的Windows子類化和API繪圖函數也位於另一個dll(或ocx)中以避免崩潰。另外我們在我們的軟件中使用了GPF處理程序(SetUnhandledExceptionFilter和相關的API函數),但是這僅在EXE中打開 - 無論如何在IDE中都不起作用。我們的GPF大多發生在EXE中:)

對於調試,您可以排除一些代碼路徑,特別是與Windows消息/子類化,全局鉤子,繪圖和API回調相關的代碼路徑。你可以安裝一些更好的調試器(甚至VC可用)來查看調用堆棧 - 有時這包括系統函數名稱,暗示錯誤操作。

+0

阿沃的基本上是正確的。從描述來看,這聽起來像是一個內存破壞問題,只是以一種明顯的「隨機」方式拋棄了堆棧。當在IDE中時,垃圾堆棧在編譯時會更麻煩。我以前有過這些,他們可能非常難以追捕。禁用代碼路徑,大量日誌記錄,這可能是你最好的選擇。 – DarinH 2011-06-09 17:03:37

+1

我忘了大量的日誌,感謝提示!對於日誌記錄,你應該確保日誌文件在每次寫入後立即關閉並刷新到磁盤,否則你可能(並且確實)會丟失最後一個更有趣的條目。 – Arvo 2011-06-10 06:48:30