問題タブ [thread-sanitizer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - dmake: エラー コード 137、-Wl、-Ttext-segment=0x855555000000 および /proc/sys/kernel/randomize_va_space 値が 2 の使用後に「シェル エスケープ」を作成中
スレッド サニタイズされた実行可能ファイルの実行中に、次のエラー メッセージが表示されます。(コンパイル時にフラグを立て、実行時に「-pie」フラグを使用-fPIC
しました):-fsanitized=thread
-fsanitize=thread -Wl
ただし、この BugZilla リンクを参照した後、値 2 でランダム化を確認/proc/sys/kernel/randomize_va_space
して有効にしました。リンカ スイッチを介して PIE をロードする場所も指定しました-Ttext-segment 0x855555000000
。
これでFATALエラーはなくなりましたが、新しいエラーメッセージが表示されました:
フラグのどこを間違えているのかわかりません。何か案が?
c++ - OpenMP プログラムに Thread Sanitizer を使用できますか?
次の例を検討してください。
yieldsでコンパイルしg++ -fopenmp -fsanitize=thread
て実行する
WARNING: ThreadSanitizer: data race (pid=9576)
Read of size 4 at 0x7ffdc170f600 by thread T1:
#0 main._omp_fn.0 (a.out+0x000000400d20)
#1 gomp_thread_start /build/gcc/src/gcc-5.2.0 /libgomp/team.c:118 (libgomp.so.1+0x00000000f42d)スレッド T2 による 0x7ffdc170f600 でのサイズ 4 の以前の書き込み:
#0 main._omp_fn.0 (a.out+0x000000400d35)
#1 gomp_thread_start /build/gcc/src/gcc-5.2.0/libgomp/team.c:118 (libgomp .so.1+0x00000000f42d)場所はメインスレッドのスタックです。
メインスレッドによって作成されたスレッド T1 (tid=9578、実行中):
#0 pthread_create /build/gcc/src/gcc-5.2.0/libsanitizer/tsan/tsan_interceptors.cc:895 (libtsan.so.0+0x000000027a37)
# 1 gomp_team_start /build/gcc/src/gcc-5.2.0/libgomp/team.c:796 (libgomp.so.1+0x00000000f98f)
#2 __libc_start_main (libc.so.6+0x00000002060f)メインスレッドによって作成されたスレッド T2 (tid=9579、実行中):
#0 pthread_create /build/gcc/src/gcc-5.2.0/libsanitizer/tsan/tsan_interceptors.cc:895 (libtsan.so.0+0x000000027a37)
# 1 gomp_team_start /build/gcc/src/gcc-5.2.0/libgomp/team.c:796 (libgomp.so.1+0x00000000f98f)
#2 __libc_start_main (libc.so.6+0x00000002060f)概要: ThreadSanitizer: データ競合 ??:0 main._omp_fn.0
私が見る限り、これは偽陽性です。これを回避する方法はありますか?
(clang と libomp で動作するものでも問題ありません。)
c++11 - ThreadSanitizer がこのロックフリーの例で競合を報告するのはなぜですか?
これを簡単な自己完結型の例に要約しました。メイン スレッドは 1000 個のアイテムをキューに入れ、ワーカー スレッドは同時にキューから取り出そうとします。ThreadSanitizer は、要素の 1 つの読み取りと書き込みの間で競合が発生していると訴えていますが、それらを保護する取得と解放のメモリ バリア シーケンスがあります。
ThreadSanitizer の出力:
コマンドライン:
g++ バージョン: 5.3.1
tsan がこれをデータ競合だと考えている理由を説明できる人はいますか?
アップデート
これは偽陽性のようです。ThreadSanitizer を緩和するために、注釈を追加しました (サポートされているものについてはこちらを、例についてはこちらを参照してください)。マクロを介して GCC で tsan が有効になっているかどうかを検出する機能は最近追加されたばかりなので、今のところ g++に手動で渡す必要がありました。-D__SANITIZE_THREAD__
現在、ThreadSanitizer は実行時に満足しています。
xcode - 外部ライブラリから Xcode で Thread Sanitizer の警告を抑制するにはどうすればよいですか?
Xcode 8 には、競合状態やその他のスレッド関連の問題を検出するためのツールである Thread Sanitizer が組み込まれています。
これを私のプロジェクトに対して実行しようとしていますが、サードパーティのバイナリ ライブラリで多くの問題を検出しています。これらの問題は、私自身のコードのどの問題よりも圧倒的であり、ベンダーが修正するまでバイナリ ライブラリを置き換えることはできません。
サードパーティ ライブラリの Xcode でこれらの Thread Sanitizer 警告を抑制するにはどうすればよいですか?
c++ - gcc のスレッド サニタイザーを使用すると、起動時にさまざまなエラーが発生する
奇妙なマルチスレッドのバグがいくつかあるので、gcc スレッド サニタイザーを使用してそれらを見つけたいと思いました。ただし、-sanitize=thread
結果のバイナリ segfaults を使用してコンパイルすると、次のスタック トレースがすぐに表示されます。
属性を追加しようとしました-static-libtsan
が、次のエラーが発生しました。
どうすればこれを修正できますか? ここで何が間違っていますか?
c++ - C++11 (g++ スレッド サニタイズ) アトミックを使用した非アトミック操作の順序付け (誤検出?)
g++ とスレッド サニタイザーを試していますが、誤検知が発生していると思います。これは本当ですか、それとも大きな間違いを犯していますか?
プログラム (Anthony Williams: C++ Concurrency in Action、145 ページ、リスト 5.13 からカットアンドペースト)
以下でコンパイル:
g++ バージョン
私は得ています:
より複雑なプログラムでこの警告が表示されました。これは私のバグだと思っていましたが、「教科書プログラム」でも同じ動作が表示されます。それは (つまり、いくつかのコンパイラ スイッチが欠落している) 私ですか、それとも g++ ですか?
UPDATEDリンク から取得
コンパイル コマンド
multithreading - helgrind でサポートされていて、threadsanitizer に欠けている機能とその逆は何ですか?
パフォーマンスはさておき、valgrind --tool=helgrind でサポートされていて gcc -fsanitize=thread に欠けている機能、およびその逆の機能は何ですか? プラットフォーム依存ですか?
最も重大なエラーを検出するのはどれですか? gcc スレッドサニタイズはアドレスサニタイズと互換性がなく、valgrind はプロジェクトの実行を非常に遅くするため、可能であれば 1 つだけを使用したいと考えています。