我正在观察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。