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 錯誤範例