2008-10-17 112 views
0

我在使用Visual Studio 2k3中的C++編寫的應用程序中收到了錯誤的數據,所以我決定調試它。然後我發現它正在拋出一個異常,但我無法追查。調試導致異常?

然後,我放置了一些try/catch塊並低下,當我不調試時,沒有例外。也就是說,我看起來像這樣的代碼:

​​ 所以,如果我逐行通過代碼行,我會得到一個異常,並趕上捕獲。但是如果我讓它在捕獲內部的斷點處運行,則什麼都不會發生。使用迭代器具有相同的行爲。我可以成功檢查矢量的大小,所以我知道我處於界限之內。
誰能告訴我發生了什麼事?如果它很重要我正在使用一些標準的Windows庫和OpenGL。

+0

不是一個ASSERT,我沒有使用有條件的斷點,DebugBreak的行爲方式相同(但我之前不知道,這很方便)。 – Whaledawg 2008-10-17 23:25:32

回答

1

是ASSERT的例外嗎?這些可能在編譯時被編譯出來,或者以其他方式拋出一個斷言。

例如,你可以有

#ifdef DEBUG 
#define ASSERT(cond) if (cond) throw CDebugAssertionObj; 
#else 
#define ASSERT(cond) 
#endif 
0

如果您使用的是優秀的IDE,允許條件斷點(如,「打破這裏如果我== 5」),那麼可能的條件本身正在引起例外。

有那麼一個......當我發現它時,我的頭受傷了。

2

你可以試着放置

DebugBreak(); 

呼叫catch子句。如果應用程序在調試器中運行,它應該得到控制權。如果它沒有在調試器中運行,則應該有機會附加「Just in Time」調試器(如果已安裝,通常是Visual Studio)。

1

我指的是VS2005,但它應該適用於你的情況。如果您訪問IDE 調試>例外..菜單項可以指定IDE調試時應該拋出打破異常類型這應該引起你看行異常是由單步執行時,通過上調應用程序。

您可能需要弄清楚要捕捉哪些類型(某些第一次機會異常實際上不是問題),但它有助於確定引發異常的點。

0

該代碼是類方法的一部分,並且是ListOfStuff類的成員?如果是這樣,請檢查以確保您的指針this有效。

相關問題