2011-05-28 49 views
5

我必須爲一些寫得不好的C++代碼編寫測試。問題在於代碼在許多情況下(通常是由於訪問超出字符串/向量範圍之外的愚蠢錯誤導致)導致STL斷言/調試中斷,從而導致測試終止。如何讓STL拋出異常而不是斷言?

是否有可能使STL拋出異常(可以被捕獲)而不是崩潰?

我必須將原始代碼的更改保持爲絕對最小值。

感謝您的幫助

+2

您正在使用哪種標準庫實現? – 2011-05-28 10:31:01

+0

我目前在VS 2010上,但代碼應該是多平臺的(至少是GCC和VS的最後一個主要版本)。 – 2011-05-28 10:38:18

+6

我無法在這裏看到問題......使用調試器,它會完全告訴你在什麼情況下斷言發生,修復它,移動到下一個。如果您想在短時間內忽略某些問題,許多測試框架允許您跳過或跳到某個特定的測試,但斷言對於調試是非常棒的。 – 2011-05-28 10:54:50

回答

3

這絕對取決於您使用的STL。也就是說,這可能根本不可能。

該標準定義了許多保證(特別是C++ 0x之一)以及函數是否拋出是這些保證的一部分。例如std::vector<T>::operator[]不會拋出。這就是說,可能有一些技巧(特定的編譯標誌用於調試,或者更改STL中使用的宏,如果有的話),但它將是非常具體的。

另一種解決方案可能是嘗試在虛擬環境中運行該程序。例如,在Linux上,您可以在Valgrind下運行它。它會報告訪問錯誤,但不會實際停止執行程序。

相關問題