2010-04-22 44 views
3

我有一個偶爾在發佈版本中崩潰的應用程序;不幸的是,它看起來像是在第三方DLL中崩潰。在試圖解決這個問題時,我一直在如何游泳,如何描述Windows如何創建崩潰轉儲。Win32:Dr.Watson的完整/迷你轉儲和我自己寫的有什麼不同?

我想使用這個建議小型轉儲:

Getting a dump of a process that crashes on startup

我打算在代碼中離開這個功能,這樣的轉儲我的應用程序始終創造,而無需在PC集事先做好準備。順便說一句,這個應用程序不適用於分發;它將與我們自己的硬件配對,所以我不關心隨機用戶在應用程序碰巧崩潰時在其機器上創建轉儲文件。

附加說明:所有的代碼都是C/C++。

Dr.Watson(drwtsn32.exe)和這段代碼會爲我產生什麼不同?

回答

0

我不這麼認爲。儘管Watson博士將生成完整或小型轉儲,但您可以使用ntsd debugger instead來更好地控制轉儲中包含的數據。 Watson的小轉儲對於大多數事情來說足夠好,你可以獲得調用堆棧和變量。如果你需要更多,ntsd has a load of options

使用DrWatson的唯一好處是預裝在Windows上。

1

除了如果您創建自己的小型轉儲器,您可以更好地控制其中的細節級別,沒有多大區別。默認情況下,Minidumps有堆棧和一些本地變量,但是創建自己可以創建一個完整的內存轉儲選項,這可能證明是更有用的(儘管如果內存映像是大)。

如果崩潰發生的頻率相當合理,那麼可能需要收集一些drwatson(或者Vista之後的默認值)爲您生成的小型轉儲,因爲這可能會爲您提供足夠的信息。如果沒有,那麼你可以選擇添加你自己的未處理的異常過濾器。另一件可能發生的事情是,您收到的小型轉儲是崩潰的網站,而不是可能出現的第一次機會異常。創建您自己的小型轉儲意味着您更有可能獲得更接近問題出處的堆棧跟蹤。

另一種選擇是,如果您的機器出現問題的頻率更高,則會在後臺運行ADPlus - 它會一直等待,直到您的應用程序崩潰或拋出異常,然後生成一些有用的日誌文件。它和未處理的異常過濾器做類似的事情,除了它不需要修改你的應用程序。

2

有了Dr.Watson,只有在Dr.看到你「墜毀」時你纔會得到傾倒。使用dumper API,您可以從應用程序的任何位置調用它。例如。你可以蹦跳普通斷言來轉儲而不是顯示對話框。根據我的經驗,一旦您在應用程序中獲得了轉儲支持,您會發現在調查,排除故障和解決各種問題方面更容易,因爲您可以在任何您認爲適合的地方生成完整轉儲文件(甚至是小型轉儲文件)碼。

相關問題