3

tcmallocにリンクされたバイナリを実行していますが、検出しているリークのスタックトレースを生成していません。

The output says:
The 1 largest leaks:
Leak of 1401231 bytes in 82093 objects allocated from:


If the preceding stack traces are not enough to find the leaks, try running THIS shell command:

pprof ../../prog "/tmp/prog.15062.prog-end.heap" --inuse_objects --lines --heapcheck  --edgefraction=1e-10 --nodefraction=1e-10 --gv

pprofを実行すると、印刷するノードがないというメッセージが表示されます。

メモリリークが疑われるコードを同封しています

HeapLeakChecker checker("prog");
....
assert(checker.NoLeaks());

これをデバッグする方法について何かアイデアはありますか?

4

1 に答える 1

1

-fno-omit-frame-pointer (gcc) を使用してプログラムをビルドすることをお勧めします。セットアップによってはスタック トレースを取得するためにフレーム ポインターが必要になる場合があるためです。

tcmalloc は通常 libunwind を使用してスタック トレースを取得しますが、デッドロックの問題があるため、どこでも使用できるわけではありません。

興味深い情報は、生成されたファイル (この場合は /tmp/prog.15062.prog-end.heap) にいくつかのアドレスが含まれているかどうかです。

于 2013-01-14T17:49:06.563 に答える