title |
tags |
C/C++のsanitizerの使い方 |
note |
info-tech |
development |
programming-language |
howto |
|
概要
- バグを検知するコードを埋め込むための,sanitizerと呼ばれる機能がある
- このページではsanitizerの使い方を説明する
使い方
コンパイル時にsanitizerを埋め込む
- 種類ごとにオプションが異なる
- XXXにはSanitizer名をカンマ区切りで羅列する
g++ -fsanitizer=XXX a.cc
gcc -fsanitizer=XXX a.c
代表的なSanitizer
- ここで
-fsanitizer=
を検索すると一覧が見れる
thread
はaddress
やundefined
と同居できない
実行時にsanitizerの挙動を指定する
- sanitizerが埋め込まれたバイナリに対して,実行時に,sanitizerの挙動を環境変数で指定することができる
- 詳細は各sanitizerの説明ページを参照
所感
thread
が強すぎる
thread
は実際にNf7のデバッグで使ってる
- sanitizerがなければ気づけなかったcondition raceがかなりあった
thread
がaddress
やundefined
と一緒に使えないのが痛い
- どちらともを使うには,
thread
でビルド,テストした後に,オプションを変えてビルドし直し,同じテストを実行しなければならない
- 上に挙げた全てのsanitizerは,m2 macbookで使えなかった
- sanitizerの機能を含んだライブラリ(
libubsan
など)が無いと言われてリンクに失敗する