AddressSanitizerが思った以上に優秀

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

memcpyでアドレスオーバーラップさせると・・・で少しだけ言及したが、gcc4.8以降あるいはclang 3.1以降ではAddressSanitizer(略称ASan)が使えるようになっている。また、Xxode 7以降ではビルドスキーマの設定にAddressSanitizerを使用するかどうかのオプションが増えており、容易にAddressSanitizerが使える。

AddressSanitizerは有効にすることで、バッファーオーバーフローやヒープオーバーフロー、あるいはmemcpyのオーバーラップを検知して、検知したら異常終了するようにできる。

コマンドラインでコンパイルする場合は、コンパイル時に以下のフラグを追加する。

-g -fsanitize=address -fno-omit-frame-pointer

XcodeでAddressSanitizerを使う場合は、XcodeのSchemeの設定のDiagnosticsにある「Enable Address Sanitizer」に
チェックを入れればAddress Sanitizerが使えるようになる。

Xcode 7でAddress Sanitizerを有効にする

ただし、Address SanitizerそのものはXcode 7以降が必須となる。

AddressSanitiezrを使うことでこれまで困難だったバッファーオーバーフローなどのバグを見つけやすくなっているので、デバッグでは上手く使っていきたいところである。

タイトルとURLをコピーしました