Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C “如何调试”;“内存不足”;从核心?_C_Debugging_Gdb - Fatal编程技术网

C “如何调试”;“内存不足”;从核心?

C “如何调试”;“内存不足”;从核心?,c,debugging,gdb,C,Debugging,Gdb,我从g_ascii_strdown()得到一个内核,它说它在执行malloc()时出错,然后崩溃了。所以,如果进程遇到内存不足的情况,有没有办法从core和gdb中找出程序的哪个部分(调用方、堆栈或线程)分配了内存 换句话说,如果我有核心文件。核心文件中存在哪些类型的信息可以用来查找内存分配?一般来说,malloc不保存任何簿记信息,这些信息可以让您确定程序的哪些部分分配了内存。由于该信息不在实时进程中,因此也不会在核心转储中 如果您想弄清楚这一点,您需要使用一些mallocdebug库/程序。

我从g_ascii_strdown()得到一个内核,它说它在执行malloc()时出错,然后崩溃了。所以,如果进程遇到内存不足的情况,有没有办法从core和gdb中找出程序的哪个部分(调用方、堆栈或线程)分配了内存


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

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

如果您想弄清楚这一点,您需要使用一些
malloc
debug库/程序。我通常建议这样做,因为它包含一个优秀的
malloc
调试器,但是Valgrind只在活动进程上工作。可能有一些可供选择的
malloc
库,您可以对其进行链接,这些库将这些信息保存在核心转储中,但如果有,我不能说我知道它。

闻起来像是一些。用于显示问题的可重复运行(您需要在
valgrind
下再次启动程序)。您可能无法单独使用
core
dump在验尸后找到问题

顺便说一句,文档还建议在启动时很早调用
g_mem_set_vtable(glib_mem_profiler_table)
(在
main的开头)

另见


最后,知道哪部分内存耗尽并不重要。可用内存是一个完整的过程。运行pid 1234程序时,请使用
cat/proc/1234/maps
&请参见您的问题有点不清楚。“计算出所有分配的内存”是什么意思?您到底想做什么?我想知道进程/程序的哪个部分分配了多少。@spa,核心是崩溃时程序状态的转储,您需要系统状态。它们完全不同——要收集系统状态,您需要设置基本的监控,如
collectl
,等等(或收集系统核心a.k.a.crashdump/kdump/等等)。我有核心文件。核心文件中有什么样的信息可以用来找出内存分配。这是什么样的程序?你应该编辑你的问题来改进它!