共用方式為


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