次の表に、AddressSanitizer のオプションを示します。 これらを有効にするには、ASAN_OPTIONS環境変数を使用するか、__asan_default_options()説明するユーザー関数をオーバーライドします。
注
これらの説明は、Microsoft Visual C++ (MSVC) 固有の動作を説明します。これは、Clang のランタイム オプションとは異なる場合があります。
| Flag | 既定値 | Description |
|---|---|---|
abort_on_error |
false |
true場合、ASan はエラー レポートを印刷した後、abort()の代わりに_exit()を呼び出します。 |
alloc_dealloc_mismatch |
false |
malloc
/
delete、new[]/freeなどのメモリ操作の不一致を検出します。 |
allocator_frees_and_returns_null_on_realloc_zero |
true |
trueに設定した場合、realloc(p, 0)は既定でfree(p)と同じです (POSIX 標準と同じです)。
falseに設定すると、realloc(p, 0)は、使用できない割り当て済み領域へのポインターを返します。 |
allocator_may_return_null |
false |
true場合、アロケーターはメモリ不足時にnullptrを返します。 ASan はクラッシュする代わりに、アロケーターのエラーに関する警告を出力し、実行を続行します。 |
allow_user_poisoning |
true |
true場合は、手動 AddressSanitizer ポイズニング インターフェイスを使用して、メモリ領域を手動で有害または非固定としてマークできます。 |
check_initialization_order |
false |
true場合は、初期化順序の問題をキャッチしようとします。 |
continue_on_error |
0 | メモリの安全性エラーの報告中にアプリケーションの実行を続行できるようにします。 0-disabled。 1-enabled;エラーが stdoutに送信されます。2-enabled;エラーが stderrに送信されます。詳細については、 continue_on_errorを参照してください。 |
detect_container_overflow |
true |
true場合は、コンテナー オーバーフロー注釈を優先します。 詳細については、「 ContainerOverflow」を参照してください。 |
detect_invalid_pointer_pairs |
false |
true場合、ASan は、異なるオブジェクトに属するポインターなどの無効なポインター ペアに対する<、<=、>、>=、-などの操作を検出します。 |
detect_stack_use_after_return |
false |
実験的。
true場合、ASan は実行時にstack-use-after-returnチェックを有効にします。
/fsanitize-address-use-after-returnが必要です。 詳細については、 スタック使用後の戻り値に関するページを参照してください。 |
exitcode |
1 | ASan がエラーを検出した場合、プログラムの終了状態をこの値でオーバーライドします。 |
external_symbolizer_path |
"" | 外部シンボルへのパス。 空の場合、ASan はシンボル表示 $PATH を検索します。 |
fast_unwind_on_malloc |
true |
使用可能な場合、ASan は、 malloc/freeで高速フレーム ポインター ベースのアンワインダーを使用します。 |
halt_on_error |
true |
サポートされていません。
continue_on_error を代わりに使用します。 |
handle_segv |
true |
true場合、ASan はSEGVエラーを処理します。 |
handle_sigfpe |
true |
true場合、ASan はSIGFPEエラーを処理します。 |
handle_sigill |
true |
true場合、ASan はSIGILLエラーを処理します。 |
help |
false |
true場合、ASan はフラグ オプションをコンソールに出力します。 |
iat_overwrite |
error |
error - 上書きが検出されるたびにエラーを報告します。protect - 上書きされた定義の使用を回避します。ignore - 上書きされた関数を修正しようとしません。 詳細については、iat_overwriteを参照してください。 |
include_if_exists |
"" | 指定したファイルからオプションを読み取ります。 ファイルが存在しない場合、ASan は失敗しません。 |
intercept_strpbrk |
true |
true場合は、strpbrkのカスタム ラッパーを使用して、さらに多くのエラーを見つけます。 |
intercept_strspn |
true |
true場合は、strspnとstrcspnのカスタム ラッパーを使用して、さらに多くのエラーを見つけます。 |
intercept_strstr |
true |
true場合は、strstrとstrcasestrのカスタム ラッパーを使用して、さらに多くのエラーを見つけます。 |
malloc_context_size |
1 | 割り当て/割り当て解除ごとに保持するスタック フレームの最大数。 |
malloc_fill_byte |
0xbe |
新しく割り当てられたメモリを埋めるために使用される値。 |
max_malloc_fill_size |
4096 | ASan アロケーターは、malloc_fill_byteの呼び出しで最大max_malloc_fill_sizeまでのmallocを割り当てに入力します。 |
max_redzone |
2048 | ヒープ オブジェクトに関するレッドゾーンの最大サイズ (バイト単位)。 |
new_delete_type_mismatch |
true |
newとdeleteのサイズの不一致に関するエラーを報告します。 詳細については、new-delete-type-mismatchを参照してください。 |
poison_heap |
true |
true場合は、割り当てと割り当て解除時にヒープ メモリを有害にしてください。
false は、アロケーターまたはインストルメンテーターのベンチマークに役立ちます。 |
poison_partial |
true |
true場合は、部分的にアドレス指定可能な 8 バイトのアラインワードを有害にします。 このフラグはヒープ バッファーとグローバル バッファーに影響しますが、スタック バッファーには影響しません。 |
print_cmdline |
false |
クラッシュ時にコマンド ラインを出力します。
continue_on_error
> = 1 に設定すると、現在の作業ディレクトリが出力され、UTF-16認識されます。 |
print_legend |
true |
true場合は、ASan レポートに付随するシャドウ メモリ マップの凡例を印刷します。 |
print_stats |
false |
true場合は、ASan レポートの印刷後にアロケーター統計を出力します。 |
print_summary |
true |
false場合、エラー レポートに付随するエラーの概要の表示を無効にします。 |
quarantine_size_mb |
-1 |
use-after-free エラーの検出に使用される検疫のサイズ (MB 単位)。 値を小さくすると、偽陰性の可能性が高くなる可能性があります。 |
redzone |
16 | ヒープ オブジェクトに関するレッドゾーンの最小サイズ (バイト単位)。 要件: redzone >= 16 、2 の累乗である必要があります。 |
replace_str |
true |
true場合は、libc文字列関数のカスタム ラッパーと置換を使用して、より多くのエラーを見つけます。 |
report_globals |
1 | グローバルのバッファー オーバーフローに応答する方法: 0- グローバルでのバッファー オーバーフローを検出しません。 1 - バッファー オーバーフローを検出します。 2 - バッファー オーバーフローを検出し、登録済みのグローバル データを出力します。 |
sleep_before_dying |
0 | エラー レポートの印刷とプログラムの終了の間にスリープ状態になる秒数。 |
stack_trace_format |
DEFAULT |
スタック フレームのレンダリングに使用する書式指定文字列。
DEFAULT
-
#%n %p %F %L. 使用可能なプレースホルダーの一覧:%% - '%' 文字を表します%n - フレーム番号 ( frame_noのコピー)%p - PC%m - モジュールへのパス%o - モジュール内のオフセット%f - 関数名%q - 使用可能な場合は、関数内のオフセット%s - ソース ファイルへのパス%l - ソース ファイル内の行%c - ソース ファイル内の列%F - 関数が既知の場合、ASan はソースが不明な場合、 in <func name> を出力し、その後にこの関数のオフセットを出力します%S - ASan はファイル/行/列の情報を出力します%L - ファイル情報が使用可能な場合、ASan はファイル名、行、列を出力します。 モジュール情報が使用可能な場合、ASan はモジュール名、オフセット、およびアーキテクチャを出力します。 どちらも使用できない場合、ASan は (<unknown module>)%M - 既知の場合、ASan はモジュールのベース名とオフセットを出力します。 PC |
strict_memcmp |
true |
true場合は、memcmp(p1, p2, n)とnを比較する前に、p1が常にp2バイトを読み取ると想定します。 |
strict_string_checks |
false |
true場合は、文字列引数が正しく null で終了していることを確認します。 |
strip_path_prefix |
"" | エラー レポートのファイル パスからこのプレフィックスを削除します。 |
symbolize |
true |
true場合は、llvm-symbolizerを使用して、仮想アドレスをファイルまたは行の場所に変換します。 |
symbolize_inline_frames |
true |
スタックトレース内のインライン フレームを印刷します。 |
verbosity |
0 | 詳細レベル: 0 - 既定の詳細度。 1 - より多くの出力。 2 - さらに多くの出力。 3 - 最大詳細度。 |
windows_fast_fail_on_error |
false |
true場合、エラー レポートを印刷した後、プロセスは__fastfail(71)で終了できます。 詳細については、windows_fast_fail_on_errorを参照してください。 |
windows_hook_legacy_allocators |
true |
true場合は、(Global/Local)(Alloc/Free/Size/ReAlloc/Lock/Unlock) 関数のフックを有効にします。 |
こちらも参照ください
AddressSanitizer の概要
AddressSanitizer の既知の問題
AddressSanitizer のビルドと言語リファレンス
AddressSanitizer シャドウ バイト
AddressSanitizer クラウドまたは分散テスト
AddressSanitizer デバッガーの統合
AddressSanitizer エラーの例