2009-02-09 59 views
3

在Windows/C++上,我想定製斷言對話框來永遠忽略斷言,所以我可以對斷言更積極。我明白編寫一個正確的斷言宏是多麼困難,並且不希望這樣做,只需掛接對話框代碼即可。有沒有簡單的方法(或簡潔的黑客)來做到這一點?自定義斷言宏

article on assert macro dangers(googlecache)

更新:更具侵略性=>使用更爲頻繁和noncrash 錯誤。我希望能夠永遠忽略斷言,因此如果在循環中發生小錯誤斷言,它不會有效地阻止我的進程。

回答

2

調查 _CrtSetReportHook函數或更新的_CrtSetReportHook2。您可以使用它來安裝一個記錄「已看到」消息的掛鉤,並在再次看到時將其報告爲已處理。

2

如果通過「更積極」的意思是使用斷言進行錯誤處理,那麼最好使用異常。

+0

我不會 – 2009-02-09 18:47:12

1

按照我們的嵌入式主Miro Samek的教導:

An exception or a bug?

向下滾動定製斷言的行爲。 (但是請閱讀其他所有內容。)

+1

鏈接死了:( – 2010-01-25 18:14:08

+0

@Dustin Getz:感謝您指出。我更新了它。 – 2010-01-25 23:07:23

0

如果代碼不需要是線程安全的,並且如果您只想忽略斷言「永遠」的意思,那麼在第一次後它們將被忽略每次都運行程序,而不是永遠的,因爲你第一次忽略它,然後它永遠不會再次啓動全部程序運行,然後只需將斷言測試與靜態布爾值相結合,該靜態布爾值被設置爲false默認。

void someFunc(...) 
{ 
... 
static bool bFireAssertion(false); 

ASSERT(bFireAssertion || <your assertion test>); 
... 
} 

然後當你希望它停止觸發時,在調試器中設置bFireAssertion爲true。既然它永遠是真的,那麼ASSERT就會短路,永遠不會評估你的測試。