2012-01-31 8 views
6

私のアプリの印刷複数の行を:はどのように「tcmallocを:大アロケーション....」トレースするよう

tcmalloc: large alloc 4294488064 bytes == 0x2b968d8000 @ 0x727432 0x727302 0x727a58 0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a 
tcmalloc: large alloc 4294488064 bytes == 0x2c97063000 @ 0x727432 0x727302 0x727a58 0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a 
tcmalloc: large alloc 4294488064 bytes == 0x2b968d8000 @ 0x727432 0x727302 0x727a58 0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a 

このメッセージがから来ているのでしょうか?私のアプリにいくつかのバグやメモリリークがあることを意味しますか?根本原因をどのように辿ることができますか?

+3

あなたのコードの行にmemアドレスをトレースするには、addr2lineコマンドラインツールを使用します。addr2line -e <実行可能ファイル名>として使用し、Enterキーを押してアドレスを貼り付けてEnterを押します。 –

+1

ありがとうございます。この場合、行の最後にアドレスを貼り付けますが、 "??:0"を取得します。 – Shawn

+1

-gオプションを使用してコンパイルする必要があります。 –

答えて

7

は、アプリケーションに応じて、http://code.google.com/p/gperftools/source/browse/trunk/src/tcmalloc.cc?r=80&redir=1ライン843

を参照してください - 大規模な割り当てはやバグであってもなくてもよいです。いずれの場合においても

- @マークの後の部分は、スタックトレースであり、メッセージ

4G-479232又は0x100000000-に等しくなるように思われる繰返し数(4294488064のソースを見つけるために使用することができます0x75000)は、私が元の割り当て呼び出しが負の符号付きの値を得て、それを符号なしの値として使用した疑いがあります。

+2

ありがとう、それは非常に便利です。バグはあなたの言ったように、符号なしと符号付きの値を混在させることによって引き起こされます – Shawn

1

あなたはまだ(kill -ABRTを)それをダンププロセスを実行しているか、コアにできたなら、あなたはgdbを添付しinfo symbol <address>コマンドを実行することができます(<address>は、エラーメッセージの@後にそれらの16進数のいずれかです。0x727432 ... )。

私の場合は、本物のエラーでした。

関連する問題