Visual Studio AddressSanitizer 擴充功能連結庫 (VCAsan)
連結庫會在 VCAsan*.lib
Visual Studio中實作擴充調試程式IDE功能。 這些功能可讓 IDE 在即時偵錯會話中顯示 AddressSanitizer 錯誤,或使用元數據儲存損毀傾印檔案而脫機。 每當 MSVC 編譯程式啟用 AddressSanitizer 時,連結庫就會連結。
VCAsan 連結庫清查
運行時間選項 | VCAsan 連結庫 |
---|---|
/MT |
libvcasan.lib |
/MD |
vcasan.lib |
/MTd |
libvcasand.lib |
/MDd |
vcasand.lib |
VCAsan 連結庫功能
Visual Studio IDE 中的 Rich AddressSanitizer 錯誤報告視窗
VCAsan 連結庫會使用 介面函 __asan_set_error_report_callback
式,在 AddressSanitizer 運行時間內註冊回呼。 如果產生 AddressSanitizer 報告,此回呼會用來擲回 Visual Studio 所攔截的例外狀況。 Visual Studio 會使用例外狀況數據來產生在 IDE 中向用戶顯示的訊息。
注意
VCAsan 連結庫會在 AddressSanitizer 運行時間中註冊回呼函式。 如果您的程式代碼第二次呼叫此註冊函式,則會覆寫 VCAsan 連結庫回呼註冊。 這會導致所有Visual Studio IDE整合遺失。 您將還原回預設 IDE 用戶體驗。 用戶呼叫也可以註冊其回呼遺失。 如果您遇到任一問題,請提出 Bug。
將 AddressSanitizer 錯誤儲存在新型損毀傾印檔案中
當您將 VCAsan 連結庫連結至可執行檔時,使用者可以讓它在運行時間產生損毀傾印。 然後,當診斷錯誤發生時,AddressSanitizer 運行時間會產生傾印檔案。 若要啟用此功能,使用者會使用如下的命令來 ASAN_SAVE_DUMPS
設定環境變數:
set ASAN_SAVE_DUMPS=MyFileName.dmp
檔案必須具有 .dmp
延伸模組,才能遵循 Visual Studio IDE 慣例。 (17.7之前)
以下是針對 指定 ASAN_SAVE_DUMPS
傾印檔案時所發生的情況:如果 AddressSanitizer 運行時間攔截到錯誤,則會儲存與錯誤相關聯的元數據損毀傾印檔案。 Visual Studio 16.9 版和更新版本中的調試程式可以剖析儲存在傾印檔案中的元數據。 您可以 ASAN_SAVE_DUMPS
根據每個測試設定、儲存這些二進位成品,然後在 IDE 中檢視具有適當來源索引的成品。
Visual Studio 17.7 版和更新版本支援下列各項:
引號字串現在已正確處理。 在舊版中,若是 Visual Studio 內部的環境,或使用 PowerShell 時,將環境變數設定為包含引號或空格,將無法建立預期的傾印檔案。
.dmp
明確指定延伸模組時(例如set ASAN_SAVE_DUMPS=MyDmp.dmp
,),VCAsan 會明確使用它,而且不會將相關聯的進程標識碼新增至傾印檔名。.dmp
如果檔案已經存在,且環境變數中指定的名稱相同,VCAsan 會修改檔名,如下所示:- 將數位附加至括弧中的檔名。 例如:
Myfile (1).dmp
。 - 如果在括弧中附加數位的幾次嘗試無法產生唯一名稱之後,檔案會儲存到
%APPLOCAL%
VCAsan 將列印的暫存路徑。 例如:C:\Users\~\AppData\Local\Temp\Dump.dmp
。 - 如果儲存至暫存路徑失敗,則會顯示診斷錯誤。
- 將數位附加至括弧中的檔名。 例如:
另請參閱
AddressSanitizer 概觀
AddressSanitizer 已知問題
AddressSanitizer 組建和語言參考
AddressSanitizer 運行時間參考
AddressSanitizer 陰影位元組
AddressSanitizer 雲端或分散式測試
AddressSanitizer 錯誤範例