15

我們有一個使用Visual Studio 2005構建的本地C++ Win32.exe,它可以在我們內部測試的所有機器上完美工作(XP 32位,Vista 32位& Windows 7 64位)。但是,當然,它會在客戶端的32位Vista機器上反覆崩潰。在客戶端機器上建立調試版本

周圍挖上幾個網站,我發現表明,如果我船PDB文件(vc80.pdb & PROJECTNAME .PDB)與可執行客戶的發佈版本一起花絮,有生成小型轉儲的一些方法當發生崩潰時。然後,我可以將故障轉儲加載到Visual Studio中,並獲取堆棧跟蹤和其他一些有用的信息。微軟的Dr.Watson工具似乎也參與了這個過程。

但我找不到臺階上的任何明確指示,遵循做到這一點

  • 出貨哪些文件?
  • 如何獲得崩潰轉儲生成?
  • 以及如何加載到VS?

有人可以描述這個過程嗎?

+1

我不認爲沃森博士是保證存在Vista和更高版本。 –

回答

10

我們可以從我們的發佈版本中獲得崩潰轉儲並且不需要將pdb文件與我們的產品一起發貨。

我們使用MiniDumpWriteDump()建立了調用來在我們的頂級異常處理程序中創建崩潰轉儲文件。但即使沒有這些,你也可以讓用戶使用任務管理器I belive在崩潰點生成崩潰文件,如下所述:MSDN Instructions for creating dump file

一旦你有了轉儲文件,客戶就會將它壓縮並郵寄給你,然後把它放到Visual Studio中。在VS,你再挑調試混合或調試本機,它使用當地的PDB的副本給你看調用堆棧等

Example from a dump I just created from a MS process

2

我之前做過這個,我想我跟着this guide。如果它不起作用,請查看Windbg實用程序,我記得您不需要安裝它,只需複製並運行即使從USB存儲棒上運行即可

+0

我看過那篇CodeProject文章,但看起來很過時(2002年發佈,並且有VS.Net 2003的說明)。你知道它是否適用於VS2005? (我知道編譯器也是古代的,但我必須使用它)。 WinDbg的確看起來很有前途...... +1 – Praetorian

+0

當我做到了,我用了VS2008。這絕對有可能,但你可能需要做一些調整 –

5

我覺得你的痛苦。必須在一段時間之前完成。

無論如何,你有沒有嘗試谷歌Breakpad?

Breakpad是一個圖書館和工具套件,可讓您分發 應用在緊湊型「小型轉儲」的文件編譯器提供的調試信息 刪除,記錄崩潰的用戶,將它們送回 您的服務器,從這些小型轉儲中生成C和C++堆棧跟蹤。 Breakpad也可以根據請求爲 未崩潰的程序寫入小型轉儲。

Breakpad目前使用的是谷歌Chrome,火狐,谷歌的Picasa, 卡米諾,谷歌地球和其他項目

你可以在這裏找到:http://code.google.com/p/google-breakpad/

它做同樣的事情作爲提到的其他答案,但它會自動執行,讓你花費很多時間和精力

+0

BReakpad看起來挺酷的。謝謝你提到它。 – jschroedl

6

你應該看起來像這樣的過程:

  1. 編譯一個可執行文件並生成一個PDB文件。確保不要對用於可執行文件的代碼進行任何更改,或者保留備份。
  2. 將可執行文件發送給客戶端。無需運送PDB文件。發佈它的唯一原因是,如果您想在客戶端的機器上進行調試,或者使用Process Explorer等工具在某個時刻獲取帶有函數名稱的堆棧跟蹤。你的情況似乎都不適用。
  3. 如果是XP/2003計算機,請使用drwtsn32配置崩潰轉儲的創建。如果是Vista/7/2008,則drwtsn32將退役,您應該配置WER instead。另一種選擇是使用ADPlus來啓動你的應用程序。
  4. 發生崩潰後,將轉儲發回給您,並將其加載到Visual Studio中。您必須擁有完全相同的代碼,可執行文件和PDB才能順利進行調試。

注:

  • WinDbg的是在生產環境中調試。這是一個非常強大的調試器,它是可移植的,但如果你習慣了VS,那麼使用它會更加舒適。
  • 如果您創建了一個小型轉儲,您將獲得堆棧跟蹤和一些變量值。如果您創建完整轉儲,您將獲得完整的堆(包括所有變量)以及更大的轉儲文件...如果轉移不是問題,請使用完整轉儲。
  • 如果您register at Microsoft,則可以訪問在程序在客戶端網站上崩潰時創建的轉儲。這是令人討厭的「將信息發送給微軟?」窗口你當一個進程崩潰,將轉儲發送到MS,你將有機會獲得它...
1

如果您的客戶端使用Vista SP1或更高版本,則可以配置系統以在每次應用程序崩潰時生成本地轉儲文件。您可以在MSDN site上找到完整的文檔。

您可以保留所有PDB私密。只有在實際分析轉儲文件時才需要這些文件。如果您想跟蹤與您發貨產品版本相對應的PDB,則應該強烈考慮使用符號服務器。