Visual Studio AddressSanitizer 拡張機能ライブラリ (VCAsan)

VCAsan*.lib ライブラリは、Visual Studio の拡張デバッガー IDE 機能を実装します。 これらの機能を使用すると、IDE は AddressSanitizer エラーをライブ デバッグ セッションで表示したり、メタデータを含むクラッシュ ダンプ ファイルを保存することによりオフラインで表示したりできるようになります。 ライブラリは、AddressSanitizer が MSVC コンパイラによって有効化されているときいつでもリンクされます。

VCAsan ライブラリ インベントリ

ランタイム オプション VCAsan リンク ライブラリ
/MT libvcasan.lib
/MD vcasan.lib
/MTd libvcasand.lib
/MDd vcasand.lib

VCAsan ライブラリの機能

Visual Studio IDE のリッチ AddressSanitizer エラー レポート ウィンドウ

VCAsan ライブラリは、インターフェイス関数 __asan_set_error_report_callback を使用することにより AddressSanitizer ランタイム内のコールバックを登録します。 AddressSanitizer レポートが生成された場合、このコールバックを使用して Visual Studio によってキャッチされる例外をスローします。 Visual Studio は例外データを使用して、IDE でユーザーに表示されるメッセージを生成します。

Note

VCAsan ライブラリは、AddressSanitizer ランタイムでコールバック関数を登録します。 コードでこの登録関数が 2 回目に呼び出された場合は、VCAsan ライブラリのコールバック登録が上書きされます。 この結果、すべての Visual Studio IDE 統合が失われます。 既定の IDE ユーザー エクスペリエンスに戻すことになります。 コールバックを登録するユーザーの呼び出しが失われる可能性もあります。 いずれかの問題が発生した場合は、バグを報告してください。

新しい種類のクラッシュ ダンプ ファイルに AddressSanitizer エラーを保存する

VCAsan ライブラリを実行可能ファイルにリンクすると、ユーザーがそれを有効にしてクラッシュ ダンプを実行時に生成できます。 その後、AddressSanitizer ランタイムは、診断されたエラーが発生したときダンプ ファイルを生成します。 この機能を有効にするには、ユーザーは次のようなコマンドを使用して ASAN_SAVE_DUMPS 環境変数を設定します。

set ASAN_SAVE_DUMPS=MyFileName.dmp

Visual Studio IDE の規則に従うには、ファイルに .dmp 拡張子が必要です。 (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 はそれを明示的に使用し、関連付けられているプロセス ID をダンプ ファイル名に追加しません。

  • 環境変数から指定された同じ名前の .dmp ファイルが既に存在する場合、VCAsan はファイル名を次のように変更します。

    • ファイル名に数値をかっこで囲んで追加します。 たとえば、Myfile (1).dmp のようにします。
    • かっこ内に数値を追加しようとしても一意の名前が生成されない場合、ファイルは VCAsan が出力する %APPLOCAL% 一時パスに保存されます。 たとえば、C:\Users\~\AppData\Local\Temp\Dump.dmp のようにします。
    • 一時パスへの保存に失敗すると、診断エラーが表示されます。

関連項目

AddressSanitizer の概要
AddressSanitizer の既知の問題
AddressSanitizer のビルドと言語リファレンス
AddressSanitizer ランタイム リファレンス
AddressSanitizer シャドウ バイト
AddressSanitizer クラウドまたは分散テスト
AddressSanitizer エラーの例