Search
C/C++のsanitizerの使い方
Last updated
Aug 14, 2023
# 概要
- バグを検知するコードを埋め込むための,sanitizerと呼ばれる機能がある
- このページではsanitizerの使い方を説明する
# 使い方
# コンパイル時にsanitizerを埋め込む
- 種類ごとにオプションが異なる
- XXXにはSanitizer名をカンマ区切りで羅列する
1
2
| 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
など)が無いと言われてリンクに失敗する