轉儲文件(以前稱為故障轉儲)使您能保存程序信息以供以后進行調試。 在沒有源文件或符號文件的計算機上測試程序時,轉儲文件尤其有用。 發生崩潰時,可以先保存轉儲文件,以后在生成計算機或另一台具有源文件和調試符號的計算機上對其進行調試。
由 Visual Studio 保存和打開的轉儲文件使用名為小型轉儲的文件格式。 Visual Studio 可以保存附帶或不附帶堆信息的小型轉儲文件。Visual Studio調試器可以保存適用於托管代碼或本機代碼的小型轉儲文件。調試器可以加載由 Visual Studio 或由其他以小型轉儲格式保存文件的程序所創建的轉儲文件。
創建轉儲文件
創建和保存轉儲文件的方法有以下幾種:
-
在 Visual Studio中調試進程時,可以使用“調試”菜單上的“將轉儲另存為”選項保存轉儲文件。
-
如果啟用了實時調試,則可以附加到在調試器外部運行的故障進程,中斷該進程,然后保存轉儲文件。
-
您可以保存使用 UserDump 實用工具創建的轉儲文件,該工具是 OEM 支持工具包的一部分。 可以從 Microsoft 網站的以下網頁下載包的副本:http://www.microsoft.com/downloads/search.aspx?displaylang=zh-cn。
http://download.microsoft.com/download/win2000srv/Utility/3.0/NT45/EN-US/Oem3sr2.zip
-
您可以保存使用 Autodump+ 實用工具創建的轉儲文件,該工具是 Microsoft Windows 調試工具的一部分。 可以從 Microsoft 網站的以下網頁下載 Windows 調試工具:Windows Hardware Developer Central(Windows 硬件開發中心)。
調試轉儲
Visual Studio 調試器可以讀取包含有關托管代碼、非托管代碼或二者混合的信息的轉儲文件。 可以使用普通的調試窗口來同時調試本機轉儲和托管轉儲。
轉儲要求和限制
調試轉儲文件時,您進行調試的計算機必須能夠訪問該程序的 PDB 符號文件和二進制文件。 Visual Studio 可以處理某些模塊缺少二進制文件的情況,但是必須具有足夠的模塊以生成有效調用堆棧的二進制。 否則,“模塊”窗口中將顯示消息“找不到匹配的二進制數”。
對於使用堆保存的小型轉儲文件,即使未找到應用程序的二進制文件,Visual Studio 也可以加載符號。 小型轉儲文件,沒有需要二進制數以加載符號的堆。 但是,不包含堆的小型轉儲文件要小得多,如果您有存儲或帶寬限制,這可以是一個重要的考慮因素。
在 Visual Studio 中,可以使用調試窗口來同時調試本機和托管轉儲文件。Visual Studio 2008 不支持在調試器窗口中調試托管的代碼。 調試托管的小型轉儲文件需要一個名為 SOS,從“即時”窗口中運行的工具。 在 Visual Studio 中,不再需要 SOS 來調試托管的小型轉儲文件。
保存和打開轉儲文件
在 Visual Studio 中,您可以保存來自本機進程或托管進程的轉儲文件,以便將來再進行調試。 您也可以加載從 Visual Studio 或其他生成轉儲的實用工具創建的轉儲文件。
保存轉儲文件
-
在“調試”菜單上,單擊“將轉儲另存為”。
-
在“將轉儲另存為”對話框中,從“保存類型”列表中選擇“小型轉儲”或者“附帶堆信息的小型轉儲”。
“附帶堆信息的小型轉儲”是 Visual Studio 使用的默認轉儲格式。 “小型轉儲”提供的信息較少,但同時需要的空間也較少。
-
使用導航控件選擇保存位置。
-
單擊“保存”。
如果正在調試托管代碼,則“將轉儲另存為”會創建一個托管代碼小型轉儲文件。 如果正在調試本機代碼,則“將轉儲另存為”會創建一個本機代碼小型轉儲文件。 如果正在調試混合的托管代碼和本機代碼,則“將轉儲另存為”會創建一個托管代碼小型轉儲文件。
打開轉儲文件
-
在“文件”菜單上,單擊“打開”,再單擊“文件”。
-
在“打開文件”對話框中定位並選擇轉儲文件。
它通常具有 .dmp 擴展名。
- 或者在“文件”菜單上,單擊“打開”,再單擊“文件”。
-
單擊“確定”。
將顯示“轉儲文件摘要”窗口。 在該窗口中,您可以查看轉儲文件的調試摘要信息、設置符號路徑、啟動調試以及將摘要信息復制到剪貼板中。
-
在“操作”部分中,單擊“使用‘僅限本機’進行調試”或“使用‘混合模式’進行調試”開始調試。
為了找到調試轉儲文件時所需的二進制文件,Visual Studio 會在符號搜索路徑中進行查找。 為了確保 Visual Studio 能夠找到這些二進制文件,您可以在“選項”對話框或“模塊”窗口中添加一個符號搜索路徑。
轉儲模塊加載
當您在 Visual Studio 中加載轉儲文件時,調試器從轉儲文件所在位置開始查找模塊。假設在您創建轉儲文件時加載了以下二進制文件和模塊:
D:\qa\exmpl\exmpl.exe
D:\qa\exmpl\dll.dll
F:\win2k\system32\ntdll.dlll
F:\win2k\system32\kernel32.dll
在下列位置找到轉儲文件 exmpl.dmp:
C:\qa\dumps\exmpl.dmp
Visual Studio 將搜索下列位置:
C:\qa\dumps\exmpl.exe
C:\qa\dumps\exmpl\exmpl.exe
C:\qa\dumps\qa\exmpl\exmpl.exe
D:\qa\exmpl\exmpl.exe
C:\qa\dumps\dll.dll
C:\qa\dumps\exmpl\dll.dll
C:\qa\dumps\qa\exmpl\dll.dll
D:\qa\exmpl\dll.dll
C:\qa\dumps\kernel32.dll
C:\qa\dumps\system32\kernel32.dll
C:\qa\dumps\win2k\system32\kernel32.dll
F:\win32\system32\kernel32.dll
在以前的 Visual Studio 版本中,MODPATH 參數用於指定附加的模塊搜索路徑。 Visual Studio 在指定的符號搜索路徑中查找模塊,而不使用 MODPATH。