如何调试"内存不足"从核心?

时间:2015-03-13 21:02:02

标签: c debugging gdb

我从g_ascii_strdown()获得了一个核心,它表示在执行malloc()时它出错并且崩溃了。因此,如果进程遇到内存不足的情况,是否有办法从核心和gdb中找出程序的哪一部分(调用者,堆栈或线程)分配内存?

换句话说,如果我有核心文件。核心文件中存在哪些信息可以用来查找内存分配?

2 个答案:

答案 0 :(得分:3)

一般来说,malloc不保存任何簿记信息,这些信息可以让您弄清楚程序的哪些部分分配了内存。由于该信息不在实时进程中,因此它也不会在核心转储中。

如果你想弄明白,你需要使用一些malloc调试库/程序。我通常会为此推荐Valgrind,因为它包含一个优秀的malloc调试器,但Valgrind只适用于实时进程。可能存在一些可以链接的替代malloc库,它可以将这些信息保存在核心转储中,但如果存在,我不能说我知道它

答案 1 :(得分:1)

闻起来像memory leak。在显示问题的某些可重现的运行中使用valgrind(您需要在valgrind下重新启动该程序)。您可能无法使用core转储单独

找到问题

顺便说一句,glib running文档还建议在启动时(g_mem_set_vtable (glib_mem_profiler_table)的开头)很早就致电main

另请参阅Boehm conservative garbage collector

最后,知道哪部分内存耗尽并不重要。可用内存是一个完整的过程。运行pid 1234程序时,请使用cat /proc/1234/maps&见proc(5)