core dump in malloc



我正在观察libc中的核心转储。

#6271 0xb8df in raise () from /lib64/libc.so.6
#6272 0x5cf5 in abort () from /lib64/libc.so.6
#6273 0xec17 in __libc_message () from /lib64/libc.so.6
#6274 0x553c in malloc_printerr () from /lib64/libc.so.6
#6275 0x83cc in _int_malloc () from /lib64/libc.so.6
#6276 0x9937 in malloc () from /lib64/libc.so.6
#6277 0x9dff in jsonp_malloc () from jansson
#6278 0xce06 in json_array () from jansson
#6279 0x9555 in parse_value () from jansson
#6280 0x9484 in parse_value () from jansson
#6281 0x9484 in parse_value () from jansson
#6282 0x9739 in parse_json () from jansson
#6283 0x9d88 in json_loads () from jansson

有人能告诉我应该如何进行故障排除吗?或者任何疑点出了什么问题?

我正在观察libc中的核心转储。

malloc_printerr可能stderr(如double-free detected等)上打印了一些错误信息。

无论如何,这次崩溃是malloc检测到某种堆损坏的结果(堆缓冲区溢出,free未分配的内存,free两次访问某些内容,等等)

这类错误几乎不可能通过core转储进行调试,因为它们通常发生在执行的后期,有时是在完全不相关的代码中。

幸运的是,专门的工具通常可以很容易地找到这些错误。

您应该首先使用gcc -fsanitize=address ...构建应用程序并运行您的测试套件。如果幸运的话,这将暴露错误。

另一个可以帮助(不需要重新构建,但捕获更少的错误)的工具是Valgrind。