C++ サニタイザー



以下は、実用的で移植性が高く、導入の手間が少ない、複数のディストリビューションで使えるおすすめのサニタイザー一覧です。

integer、memory、HWASan などのその他のサニタイザーは、実用性がそれほど高くない、 あるいはディストリビューションやコンパイラによって実装がサポートされていなかったり、結果が異なったりする場合があるなどの理由で、この一覧には含めていません。

address: ASan — AddressSanitizer (-fsanitize=address)

目的: 実行時にメモリ安全性に関するバグを検出します。

典型的な用途:「クラッシュやメモリ破損を素早く見つける」。

典型的な検出内容

仕組み(概念的に)

注意点


thread: TSan — ThreadSanitizer (-fsanitize=thread)

データ競合やその他の並行処理の問題を検出します:

典型的な用途:「スレッド安全性を検証する」。 注: 通常は ASan とは別のビルドで実行します。

目的: データ競合と、その他いくつかの並行処理に関するバグを検出します。

典型的な検出内容

仕組み

注意点


undefined UBSan — UndefinedBehaviorSanitizer (-fsanitize=undefined とサブチェック群)

C/C++ における未定義動作を検出します:

典型的な用途:「クラッシュしない場合でも誤りである UB を検出する」。

目的: 実行時に未定義動作(言語/ABI 規則の違反)を検出します。

典型的な検出内容(例)

仕組み

注意点


leak LSan — LeakSanitizer (-fsanitize=leak または ASan のリーク検出)

メモリリーク(プログラム終了時に到達不能となる、解放されていない確保領域)を検出します。

典型的な用途:「長時間稼働するサービスやテストで、気づかないうちにリークが発生するのを防ぐ」。 Linux では ASan の一部として使われることが多いです。

目的: メモリリーク(確保されたがプログラム終了時に到達不能なオブジェクト)を検出します。

典型的な検出内容

仕組み

注意点