2012-08-13 121 views
8

當我運行我的程序(當然,它是建立在調試模式),我得到一個錯誤「外部異常80000003」。如何擺脫異常80000003?

根據Win32 Exception/Access Violation Errors這意味着0x80000003 EXCEPTION_BREAKPOINT A breakpoint was encountered.

然而,有沒有在IDE中設置斷點,我在IDE之外運行它。

是的,我有正確的可執行文件。我刪除了所有斷點,清理了我的項目並重新構建了它,但仍保留該對話框。我甚至刪除了.exe,再次構建,看到它出現在預期的地方。驗證.exe上的時間戳。我給FromCreate()添加了一個消息框,並且看到了這個消息,再加上「External exception 80000003」。

如何讓它消失(在調試模式下構建)?


D'oh !!這是舊代碼,我忘記了我實際上已經在一個錯誤條件asm int 3 end;中對此進行了編碼,這向IDE發出了一個斷點(或者如果IDE未運行,則爲錯誤框)。爲浪費時間道歉。

+1

完全可以理解。我自己也被類似的東西咬了。我已經把代碼中的'raise exception.create('todo write this code')''留下了,我認爲我也寫完了。 – 2012-08-13 18:49:27

+0

+1謝謝,@warren。很高興知道即使是專家也是錯誤的;-) – Mawg 2012-08-14 02:42:01

回答

7

斷點本質上是一個機器級指令(操作碼?),它會導致CPU處理暫停併產生異常類型信號。這通常由操作系統獲取,然後轉移到某個用戶進程(如調試器或simillar)。

當我有這個時,它幾乎總是當我的代碼跳入一些數據空間。我幾乎總是這樣說,因爲偶爾也會調試一些噩夢(!),所以我已經意外地將斷點硬編碼爲代碼。

編輯:@Ken懷特說,INT 3(斷點中斷)是我用硬編碼:-)

的一個

我會做的第一件事是獲得一個堆棧跟蹤和backwords工作。

+0

一個很好的觀點(+1),並且很有可能使用我的C代碼:-)但是肯定不太可能使用Delphi?儘管如此,我仍會嘗試對代碼進行一點一點的註釋,或者添加更多的消息框並查看出現這兩個錯誤的哪兩個,以幫助我找到它。謝謝 – Mawg 2012-08-13 04:02:30

+1

我沒有使用過Deplhi,但由於它不是託管代碼,我總是會假設如果我使用函數指針的等價物,我可以跳轉位置。 – 2012-08-13 04:03:42

+0

德爾福基本上是帕斯卡。雖然它可以有指針,但你必須跳過箍環才能使用它們 - 而我卻沒有。這就是爲什麼我認爲我的代碼不可能跳到數據段(除此之外,它在該消息之後繼續運行)。 – Mawg 2012-08-13 04:26:21