AddressSanitizer 雲端或分散式測試
您不需要在發生 AddressSanitizer 錯誤的時間和位置進行偵錯。 設定執行時間以建立當發生錯誤時儲存所有 AddressSanitizer 特定內容的損毀傾印。 然後將該損毀傾印傳送至另一部電腦以進行偵錯。 在雲端或分散式測試中執行 AddressSanitizer 時,離線偵錯可能是關鍵時間。 您可以在發生失敗的測試或生產基礎結構上建立傾印,並在稍後在開發人員電腦上進行偵錯。
Visual Studio 偵錯工具提供精確診斷的 AddressSanitizer 錯誤。 您可以檢視這些 Bug,而不需要重新執行測試、複製大型資料集、探索遺失的資料,或尋找離線的測試機器。 您只需要載入損毀傾印。
設定下列環境變數,會在 AddressSanitizer 失敗時建立損毀傾印:
set ASAN_SAVE_DUMPS=MyFileName.dmp
注意
檔案名必須具有尾碼 .dmp
,才能遵循 Visual Studio 命名慣例。
您可以在稍後在另一部電腦上使用 Visual Studio 來顯示此 傾印檔案 。
Visual Studio 可以在原始原始程式碼的內容中顯示錯誤資訊。 若要這樣做,Visual Studio 需要 偵錯符號 和 已編制索引的原始程式碼 。 為了獲得最佳偵錯體驗,用來產生這些二進位檔的 EXE、PDB 和原始程式碼必須相符。
如需儲存來源和符號的詳細資訊,請參閱 來源和符號 一節。 如需實作詳細資料和精細控制項的相關資訊,請參閱 偵錯工具整合 。
範例 - 建置、測試和分析
請考慮三部機器:A、B 和 C.建置是在機器 B 上完成,測試是在電腦 C 上執行,而且您分析機器 A 上的失敗。這些錯誤會針對原始程式碼中的源行和資料行編號報告。 您可以在使用該 確切原始程式碼版本 所產生的 PDB 檔案中,一起查看呼叫堆疊與一組符號。
下列步驟適用于導致建立 .dmp 檔案的本機或分散式案例,以及離線檢視該 AddressSanitizer 傾印檔案。
在本機產生 .dmp
- 組建
- 測試可執行檔
- 將產生的 .dmp 檔案複製到組建目錄
- 在相同的目錄中,以配對的 .pdb 開啟 .dmp 檔案
在分散式系統上產生 .dmp
- 建置和 後處理來源索引資料區塊的 PDB
- 將不可部分完成的組 (.exe, .pdb) 複製到測試機器並執行測試
- 將 (.pdb, .dmp) 的不可部分完成配對寫入 Bug 報告資料庫
- Visual Studio 會在相同的目錄中開啟具有配對 .pdb 的 .dmp 檔案
注意
您用於分析的 Visual Studio 2019 機器必須能夠存取 GitHub 或儲存索引來源的內部 \\Machine\share
。
檢視 AddressSanitizer .dmp 檔案
請確定偵錯工具 IDE 可以找到您的 PDB 和來源檔案。
開啟 Visual Studio,然後選取 [ 不使用程式碼 繼續]。 然後選取 [ 檔案 > 開啟 > 檔案 ] 以開啟 [檔案開啟] 對話方塊。 請確定檔案名尾碼為 .dmp 。
此處顯示的畫面需要再執行一個步驟,才能讓 IDE 存取符號和來源。
設定符號路徑,然後選擇 [ 僅 原生偵錯]。
此螢幕擷取畫面顯示最終載入的傾印檔案,並載入來源和 AddressSanitizer 中繼資料。
來源和符號
來源伺服器可讓用戶端擷 取用來建置應用程式之原始程式檔的確切版本 。 可執行檔或 DLL 的原始程式碼可能會隨著時間,以及版本之間的變更。 您可以使用它來查看建置特定應用程式版本的相同原始程式碼。
使用 PDB 檔案對 EXE 進行偵錯時,偵錯工具可以使用內嵌的來源伺服器資料區塊,從原始檔控制擷取適當的檔案。 它會載入對應至編譯器選項自動放入 PDB 中完整名稱的 /Zi
檔案。
若要使用來源伺服器,應用程式必須使用 將資料區塊寫入 srcsrv
PDB 檔案,以「編制來源索引 pdbstr.exe
」。 如需詳細資訊,請參閱來源伺服器和來源索引 的 一節。 您也會找到 索引來源和發佈符號 的步驟,以及如何 為偵錯工具 指定符號和原始程式碼。
如需外部檔,請參閱:
另請參閱
AddressSanitizer 概觀
AddressSanitizer 已知問題
AddressSanitizer 組建和語言參考
AddressSanitizer 執行時間參考
AddressSanitizer 陰影位元組
AddressSanitizer 偵錯工具整合
AddressSanitizer 錯誤範例
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應