Visual Studio 偵錯工具中的傾印檔案

傾印檔案是快照集,可顯示正在執行的處理序,以及某個時間點為應用程式載入的模組。 含有堆積資訊的傾印也包含該時間點應用程式記憶體的快照集。

在 Visual Studio 中開啟含有堆積的傾印檔案,就如同在偵錯工作階段中於中斷點停止。 雖然您無法繼續執行,但是可以在傾印發生時檢查應用程式的堆疊、執行緒和變數值。

傾印大多用來偵錯開發人員無法存取之機器的問題。 當您無法在自己的機器上重現損毀或無回應的程式時,就可以使用客戶機器的傾印檔案。 測試人員也會建立傾印來儲存損毀或無回應的程式資料,以用於更多測試。

Visual Studio 偵錯工具可以儲存 Managed 程式碼或機器碼的傾印檔案。 它可以偵錯由 Visual Studio 或由其他以小型傾印格式儲存檔案之程式建立的傾印檔案。

需求和限制

  • 若要從 64 位元機器偵錯傾印檔案,Visual Studio 必須在 64 位元機器上執行。
  • Visual Studio 可以對來自 Linux OS 的受控應用程式傾印檔案進行偵錯。
  • Visual Studio 可以對來自 ARM 裝置的原生應用程式傾印檔案進行偵錯。 它也可以對來自 ARM 裝置的受控應用程式傾印進行偵錯,不過只能使用原生偵錯工具。
  • 若要在 Visual Studio 中偵錯核心模式傾印檔案或使用 SOS.dll 偵錯延伸模組,請下載 Windows Driver Kit (WDK) 中的 Windows 偵錯工具。
  • Visual Studio 無法對儲存於舊版、完整使用者模式傾印格式的傾印檔案進行偵錯。 完整使用者模式傾印與含有堆積的傾印並不相同。
  • 對最佳化程式碼的傾印檔案進行偵錯可能會造成混淆。 例如,編譯器內嵌函式會造成未預期的呼叫堆疊,而其他最佳化可能會變更變數的存留期。

包含或不含堆積的傾印檔案

傾印檔案可能或可能沒有堆積資訊。

  • 含有堆積的傾印檔案包含應用程式記憶體的快照集,其中包括傾印發生時的變數值。 Visual Studio 也會將載入的原生模組二進位檔儲存在含有堆積的傾印檔案中,讓偵錯更容易進行。 Visual Studio 即使找不到應用程式二進位檔,仍可從含有堆積的傾印檔案載入符號。

  • 不含堆積的傾印檔案遠小於含有堆積的傾印,但偵錯工具必須載入應用程式二進位檔才能尋找符號資訊。 載入的二進位檔必須與傾印建立期間執行的二進位檔完全相符。 不含堆積的傾印檔案中只會儲存堆疊變數的值。

建立傾印檔案

當您在 Visual Studio 中對處理序進行偵錯時,可以在偵錯工具遇到例外狀況或中斷點停止時儲存傾印檔案。

啟用 Just-In-Time 偵錯時,您可以將 Visual Studio 偵錯工具附加至 Visual Studio 外部的損毀處理序,然後從偵錯工具儲存傾印檔案。 查看附加至到正在執行的處理序 (部分機器翻譯)。

儲存傾印檔案:

  1. 在偵錯期間於錯誤或中斷點停止時,請選取 [偵錯]>[另存傾印]

  2. 在 [另存傾印] 對話方塊的 [存檔類型] 下,選取 [小型傾印] 或 [含有堆積的小型傾印] (預設)。

  3. 瀏覽至路徑並選取此傾印檔案的名稱,然後選取 [儲存]

注意

您可以使用任何支援 Windows 小型傾印格式的程式建立傾印檔案。 例如,Windows Sysinternals 提供的 Procdump 命令列公用程式可以根據觸發程序或視需要建立處理序損毀傾印檔案。 如需使用其他工具建立傾印檔案的資訊,請參閱需求和限制

開啟傾印檔案

  1. 在 Visual Studio 中,選取 [檔案]>[開啟]>[檔案]

  2. 在 [開啟檔案] 對話方塊中,找出並選取傾印檔案。 這類檔案的副檔名通常是 .dmp。 選取 [確定]。

    [小型傾印檔案摘要] 視窗會顯示傾印檔案的摘要和模組資訊,以及您可採取的動作。

    Screenshot showing Minidump summary page.

  3. 在 [動作] 底下:

    • 若要設定符號載入位置,請選取 [設定符號路徑]
    • 若要開始進行偵錯,請選取 [僅使用受控進行偵測]、[僅使用原生進行偵錯]、[使用混合進行偵錯] 或 [使用受控記憶體進行偵錯]

尋找 .exe、.pdb 和來源檔案

若要在傾印檔案上使用完整偵錯功能,Visual Studio 需要:

  • 建立傾印的目標 .exe 檔,以及傾印處理序所使用的其他二進位檔 (例如 DLL)。
  • .exe 和其他二進位檔的符號 (.pdb) 檔。
  • 與傾印建立時的檔案完全相符版本與組建的 .exe.pdb 檔案。
  • 相關模組的來源檔案。 如果找不到來源檔案,您可以使用模組的反組譯碼。

如果傾印具備堆積資料,Visual Studio 可以處理某些模組遺漏二進位檔的情況,但是它必須擁有足夠的模組二進位檔才能產生有效的呼叫堆疊。

.exe 檔的搜尋路徑

Visual Studio 會自動在這些位置搜尋未包含在傾印檔案中 .exe 檔:

  1. 包含傾印檔案的資料夾。
  2. 傾印檔案所指定的模組路徑,這是收集傾印之機器上的模組路徑。
  3. [工具] (或 [偵錯]) >[選項]>[偵錯]>[符號] 中指定的符號路徑。 您也可以從 [傾印檔案摘要] 視窗的 [動作] 窗格開啟 符號 頁面。 您可以在這個頁面上新增更多要搜尋的位置。

使用找不到二進位檔、找不到符號或找不到來源頁面

如果 Visual Studio 找不到對傾印中模組進行偵錯所需的檔案,則會顯示找不到二進位檔找不到符號找不到來源頁面。 這些頁面提供關於問題原因的詳細資訊,並提供可協助您找出該檔案的動作連結。 請參閱指定符號 (.pdb) 和原始程式檔