簡體   English   中英

如何分析VS2010在調試模式下捕獲的未處理異常?

[英]How to analyze an unhandled exception, caught by VS2010 in debug mode?

我的C ++程序拋出在程序中未處理的異常,因此在調試模式下,VS處理它,顯示一個窗口,顯示發生未處理的異常的事實。 但是我可以查看未處理的異常嗎? 它的類型是什么,對象內部是什么?

你可以嘗試擊中Break並踩進去。 如果有任何代碼需要分析,則VS將進入異常類的處理程序或構造函數。 無論如何,這就是我在VS2010中所做的事情。

從那時起,如果您必須知道異常對象的地址,那么您應該能夠將其粘貼到Watch窗口並轉換為基本異常類(如果異常不是系統異常並且您有一個良好的階級等級)。

PS您可以擁有自己的未處理異常例程來設置其中的斷點。 可以這么簡單:

// global scope
    LONG WINAPI my_unh_exc_hndlr(_EXCEPTION_POINTERS* excPtrs)
    {
        return EXCEPTION_CONTINUE_SEARCH; // Put a breakpoint here in IDE.
    }

// ... somewhere in the beginning of main()
    SetUnhandledExceptionFilter(my_unh_exc_hndlr);

每次遇到未處理的異常時都應該運行。

另一個程序隨機崩潰? 沒有可用的來源? 沒問題。 注入代碼(小DLL),為您設置處理程序例程(除非您擁有較少的權限)和調試。

在大多數情況下,當發生異常時,Visual Studio應該打開一個對話框,其中包含斷開程序的選項,使您可以查看代碼中的位置。 此外,您應該能夠在異常發生之前分析對象,指針和諸如此類的值。 這應該足以讓我們知道出現了什么問題(除非你正在處理堆損壞或類似的東西)。 如果不了解異常本身的細節,就很難說更多。

如果您無法查看異常的所有信息,則可能需要在Visual Studio中檢查調試設置。 轉到“調試”菜單,然后單擊“例外...”。從那里,您可以選擇中斷所有例外。 這應該在發生異常時強制調試器盡快中斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM