12

私のアプリは次のようにいくつかの行を印刷します:

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

このメッセージはどこから来たのですか?アプリにバグやメモリリークがあることを意味しますか?どうすれば根本原因を追跡できますか?

4

2 に答える 2

11

http://code.google.com/p/gperftools/source/browse/trunk/src/tcmalloc.cc?r=80&redir=1行 843を参照してください。

アプリケーションによっては、大きな割り当てがバグである場合とそうでない場合があります。

いずれにしても - @ マークの後の部分はスタック トレースであり、メッセージのソースを見つけるために使用できます。

繰り返し数 (4G-479232 または 0x100000000-0x75000 に等しいと思われる 4294488064) は、元の割り当て呼び出しが負の符号付きの値を取得し、それを符号なしの値として使用したのではないかと疑っています。

于 2012-01-31T09:59:59.907 に答える
1

プロセスがまだ実行されているか、それをコア ダンプできた場合 ( )、コマンドをアタッチして実行kill -ABRTできるはずです( は、エラー メッセージの後の 16 進数の 1 つです: )。gdbinfo symbol <address><address>@0x727432 ...

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

于 2014-03-18T19:36:15.060 に答える