ThreadSanitizer (TSan) は、次のように C++ コードの実行中にマルチスレッド エラーを検出します: コードをコンパイルします:clang++ -fsanitize=thread ...リンク フラグを追加します: -ltsanTSan は競合状態とデータ競合を検出し、エラー メッセージを出力します。コードにデータ競合エラーがある場合、TSan は「データ競合」のようなメッセージを出力します。
ThreadSanitizer を使用して C++ マルチスレッド エラーをデバッグする方法
はじめに
ThreadSanitizer (TSan) は、C++ コード内のマルチスレッド エラーを検出するために使用される動的分析ツールです。他のデバッグ ツールとは異なり、静的分析だけでなく実際の実行時にこれらのエラーを検出できます。
TSan をインストールする
プロジェクトで TSan を使用するには、次の手順に従います:
clang++ -fsanitize=thread ...
-ltsan
Usage
TSan は、競合状態やデータ競合を検出するためのチェック コードを自動的に挿入します。エラーを検出すると、メッセージを出力してプログラムを終了します。
一般的な TSan エラー メッセージの一部を次に示します。
実際のケース
データ競合エラーがある次のコードを考えてみましょう:
#include <thread> #include <vector> std::vector<int> v; void thread_function(int num) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); v.push_back(num); } int main() { std::vector<std::thread> threads; for (int i = 0; i < 10; i++) { threads.push_back(std::thread(thread_function, i)); } for (auto& t : threads) { t.join(); } }
このコードをコンパイルして実行すると、TSan はデータ競合エラーを検出し、次のようなメッセージを出力します:
==3677061== ThreadSanitizer: data race on write to size 4 at 0x7ffc48162990 in thread T1 ... ==3677061== ThreadSanitizer: data race on write to size 4 at 0x7ffc481629d0 in thread T3
結論
ThreadSanitizer は、C++ マルチスレッド エラーをデバッグするための強力なツールです。実際の実行中にこれらのエラーを検出し、開発プロセスをスピードアップし、コードの堅牢性を確保します。
以上がThreadSanitizer を使用して C++ マルチスレッド エラーをデバッグするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。