在Windows/C++上,我想定製斷言對話框來永遠忽略斷言,所以我可以對斷言更積極。我明白編寫一個正確的斷言宏是多麼困難,並且不希望這樣做,只需掛接對話框代碼即可。有沒有簡單的方法(或簡潔的黑客)來做到這一點?自定義斷言宏
article on assert macro dangers(googlecache)
更新:更具侵略性=>使用更爲頻繁和noncrash 錯誤。我希望能夠永遠忽略斷言,因此如果在循環中發生小錯誤斷言,它不會有效地阻止我的進程。
在Windows/C++上,我想定製斷言對話框來永遠忽略斷言,所以我可以對斷言更積極。我明白編寫一個正確的斷言宏是多麼困難,並且不希望這樣做,只需掛接對話框代碼即可。有沒有簡單的方法(或簡潔的黑客)來做到這一點?自定義斷言宏
article on assert macro dangers(googlecache)
更新:更具侵略性=>使用更爲頻繁和noncrash 錯誤。我希望能夠永遠忽略斷言,因此如果在循環中發生小錯誤斷言,它不會有效地阻止我的進程。
調查 _CrtSetReportHook函數或更新的_CrtSetReportHook2。您可以使用它來安裝一個記錄「已看到」消息的掛鉤,並在再次看到時將其報告爲已處理。
如果通過「更積極」的意思是使用斷言進行錯誤處理,那麼最好使用異常。
鏈接死了:( – 2010-01-25 18:14:08
@Dustin Getz:感謝您指出。我更新了它。 – 2010-01-25 23:07:23
如果代碼不需要是線程安全的,並且如果您只想忽略斷言「永遠」的意思,那麼在第一次後它們將被忽略每次都運行程序,而不是永遠的,因爲你第一次忽略它,然後它永遠不會再次啓動全部程序運行,然後只需將斷言測試與靜態布爾值相結合,該靜態布爾值被設置爲false默認。
void someFunc(...)
{
...
static bool bFireAssertion(false);
ASSERT(bFireAssertion || <your assertion test>);
...
}
然後當你希望它停止觸發時,在調試器中設置bFireAssertion爲true。既然它永遠是真的,那麼ASSERT就會短路,永遠不會評估你的測試。
我不會 – 2009-02-09 18:47:12