我有第三方C庫,它可以在CRT錯誤崩潰。在這種情況下整個過程崩潰。有什麼辦法可以捕捉到所有CRT錯誤並防止進程終止。如何防止CRT錯誤的進程崩潰C++
回答
防止崩潰可能只是延遲了這個問題。
想象一下,您可以防止崩潰,但結果是,用戶會將不正確的數據保存回數據庫,或損壞數據文件,那麼您只會使問題變得更糟。
相反,嘗試找出確切的問題是什麼:
- 你傳遞不正確的參數給函數的第三方庫?
- 還是第三方庫中的錯誤?面對錯誤的圖書館製造商。
或者:
- 試圖找到一個解決辦法的問題
- 找到
編輯庫替代: 說實話,我所遇到的去年與第三方組件相同的情況。我做的是以下幾點:
首先,使用一個_ try/_except構造來解決問題。這隻有在你知道哪個函數調用它完全崩潰時纔有效。它的工作原理是這樣的:
__try
{
Some3rdPartyLibraryFunction();
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
}
二,防止您的應用程序的進一步腐敗,確保第三方庫是不是你的應用程序中再調用。例如。假設庫是一個報告組件,那麼如果遇到崩潰,請不要讓用戶再次打開報告,如下所示:
bool MyClass::openReport (char *reportname)
{
if (!reportModuleEnabled)
return false;
__try
{
OpenTheReport(reportname);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
// Tell the user about the problem and prevent further access to the library
ShowMessage ("Sorry, no more reports");
reportModuleEnabled = false;
return false;
}
return true;
}
您的程序在Windows上運行?你有沒有試過用SEH包裝有問題的代碼? http://msdn.microsoft.com/en-us/library/windows/desktop/ms680657(v=vs.85).aspx
是的我試着添加未處理的異常過濾器,並重定向異常,但都沒有工作 – mayap
真可惜,沒人明白。 CRT的錯誤與SEH無關,所以不能通過_ 嘗試... _except。 您應該使用_set_invalid_parameter_handler和_set_purecall_handler函數處理CRT錯誤。
http://crashrpt.sourceforge.net/docs/html/exception_handling.html
- 1. 防止引導程序崩潰崩潰
- 2. 如何防止FolderBrowserDialog崩潰?
- 3. NSKeyedUnarchiver - 如何防止崩潰
- 4. 防止Express.js崩潰
- 5. 如何防止C或C++程序使用CRT功能?
- 6. Hapi,好的logstash:如何防止崩潰?
- 7. Informix錯誤後的進程崩潰
- 8. 如何防止GHCi從此「崩潰」?
- 9. 如何防止崩潰bootstrap-3菜單
- 10. 如何防止點擊時Bootsrap崩潰?
- 11. 如何防止JXTreeTable根節點崩潰?
- 12. 如何`清除`防止邊緣崩潰?
- 13. 如何防止ShellFolder.getFolderColumns(...)崩潰很多
- 14. 微軟Access - 如何防止VBA崩潰?
- 15. 防止主UI從子線程崩潰
- 16. 防止應用程序崩潰
- 17. 進程突然崩潰,沒有錯誤
- 18. 防止模態對話框上的win32進程崩潰
- 19. Treeview防止節點崩潰
- 20. 防止導航欄崩潰
- 21. 防止在UICollectionView中崩潰
- 22. 防止<img>崩潰
- 23. 防止引導列崩潰
- 24. 防止崩潰 - 無event.stopPropagation()
- 25. 防止ExtJS treenode崩潰
- 26. CoreData防止更新崩潰
- 27. 防止mysql MyISAM表崩潰
- 28. 如何防止從C#中的無效輸入崩潰
- 29. 如何防止C程序崩潰所造成的外部程序
- 30. Process.Start c#進程崩潰
檢查您使用的庫函數的輸入。檢查庫狀態((每線程)初始化?)。如果一切正常,請向圖書館供應商提出錯誤。 – sehe
可能不是。如果你在Windows上,'__TRY'可能工作,或者Unix上的信號取決於確切的例外情況。它是什麼? – Rup
http://msdn.microsoft.com/en-us/library/969zc1ac.aspx看起來像你是SOL(底層的第二個函數,不能這樣做)。 –