我的应用程序打印几行,如下所示:
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这条消息来自哪里?这是否意味着我的应用程序有一些bug或内存泄漏?我怎样才能找到根本原因呢?
发布于 2012-01-31 18:00:00
请参阅http://code.google.com/p/gperftools/source/browse/trunk/src/tcmalloc.cc?r=80&redir=1 843行
根据应用程序的不同,较大的分配可能是错误,也可能不是错误。
在任何情况下-@标记之后的部分是堆栈跟踪,可用于定位消息的源
重复的数字(4294488064似乎等于4G-479232或0x100000000-0x75000)让我怀疑最初的分配调用得到了一个负的有符号值,并将其用作无符号值。
发布于 2014-03-19 03:36:15
如果进程仍在运行或能够核心转储它(kill -ABRT),那么您应该能够附加gdb并运行info symbol <address>命令(<address>是错误消息中@之后的十六进制数之一:0x727432 ...)。
在我的例子中,这是一个真实的错误。
https://stackoverflow.com/questions/9077457
复制相似问题