如果我運行一個拋出異常(內置調試)的可執行文件,我會收到一個錯誤對話框,說「Debug斷言失敗」,然後是一些有關異常的信息。發生這種情況時,程序的執行被暫停,直到我選擇「中止」,「重試」或「忽略」選項中的一個。如何禁用「Microsoft Visual C++調試庫」異常對話框?
問題是,我從腳本運行了很多應用程序,並且如果其中一個引發異常,它會暫停我的腳本直到它被處理。
有沒有辦法禁用這種異常處理機制?
編輯:我記得讀了一個註冊表鍵,前一段時間,這將禁用顯示的錯誤消息。有人知道嗎?
如果我運行一個拋出異常(內置調試)的可執行文件,我會收到一個錯誤對話框,說「Debug斷言失敗」,然後是一些有關異常的信息。發生這種情況時,程序的執行被暫停,直到我選擇「中止」,「重試」或「忽略」選項中的一個。如何禁用「Microsoft Visual C++調試庫」異常對話框?
問題是,我從腳本運行了很多應用程序,並且如果其中一個引發異常,它會暫停我的腳本直到它被處理。
有沒有辦法禁用這種異常處理機制?
編輯:我記得讀了一個註冊表鍵,前一段時間,這將禁用顯示的錯誤消息。有人知道嗎?
你可以建立你的可執行文件作爲發佈嗎?如果我記得,那應該停止出現斷言錯誤。
如果您可以修改源,則需要修改中止行爲(由assert調用)以禁止中止/重試/忽略對話框。
在中止時,仍然會產生一個故障轉儲(默認情況下),所以您不會失去重要的東西。
此外,您可以調整斷言行爲以僅寫入stderr。如果中止行爲足以滿足您的需求,則不需要此操作。注意:_Crtxxx調用僅在調試版本(/ Zi)中有效。
禁用中止/重試/忽略的最小更改。取消註釋_Crt調用幷包含crtdbg.h以修改調試模式構建中的斷言行爲。
#include <stdlib.h>
//#include <crtdbg.h>
int main(int argc,char **argv);
int main(int argc,char **argv)
{
// ON assert, write to stderr.
//_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
//_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
// Suppress the abort message
_set_abort_behavior(0, _WRITE_ABORT_MSG);
abort();
return 0;
}
即使他們是我的應用程序,在釋放我可以不建立他們。 – Geo 2010-08-05 07:28:15
@Geo:如果你不能修改應用程序本身,那麼一種選擇是編寫一個小程序,它定期檢查這個窗口的存在併發送關鍵筆劃'I'給它。我是這樣做的,這對我有很大的幫助。 – Naveen 2010-08-05 07:36:25
是不是有我們可以修改以實現類似效果的註冊表項? – Geo 2010-08-05 07:46:24