2017-10-05 31 views
0

私はtbbを使用するC++プログラムを持っていますが、GCC 6.2.1で64ビットLinuxでコンパイルしています。 Iは(-fsanitize =アドレス)消毒アドレスをコンパイルし、実行ユニットテスト、この出力が生成される:Leak Sanitizerでメモリリークの理由を見つける方法

... 
[ PASSED ] 56 tests. 

================================================================= 
==12326==ERROR: LeakSanitizer: detected memory leaks 

Direct leak of 54 byte(s) in 3 object(s) allocated from: 
    #0 0x7f4c634fd020 in strdup (/usr/lib64/libasan.so.3+0x58020) 
    #1 0x301d215bb4 (/usr/lib64/libtbb.so.2+0x301d215bb4) 

SUMMARY: AddressSanitizer: 54 byte(s) leaked in 3 allocation(s). 
make[3]: *** [CMakeFiles/check] Error 1 
make[2]: *** [CMakeFiles/check.dir/all] Error 2 
make[1]: *** [CMakeFiles/check.dir/rule] Error 2 
make: *** [check] Error 2 

コードを最適化してコンパイルされてオフ(-O0)と-fno-省略-フレーム - ポインタ。どのようにして漏れに関する情報を得ることができますか?

+1

経由でエラーに中止しないようにLSANを依頼することができますvalgridを試してみましたか? – gsamaras

+1

良い点@gsamaras私は、valgrindがより多くの情報を返すかどうか調べようとします。 – Perennialista

答えて

2

リークは、おそらく-fno-omit-frame-pointerなしでコンパイルされたシステムライブラリで発生します。そのため、Asanはフレームポインタを使用してリワインドできません。あなたは

# Or LSAN_OPTIONS, if you use standalone LSan 
export ASAN_OPTIONS=fast_unwind_on_malloc=0 

を設定することにより、ゆっくりではあるが、より堅牢なDWARFのアンワインダーを使用して試すことができますランタイムフラグの詳細についてはherehereを参照してください。

ところで、あなたは

# Or LSAN_OPTIONS, if you use standalone LSan 
export ASAN_OPTIONS=exitcode=0:... 
+0

私はfast_unwind_on_mallocを無効にしようとしましたが、より多くの情報を得ましたが、それでも問題を特定するには十分ではありません。これはpthreadにも関連しているようです。私はそれをもっと見なければならないでしょうが、私の質問に対する私の指示と答えをくれてありがとう! – Perennialista

関連する問題