如何在C中调试(大)内存分配

wfypjpf4  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(114)

我正在运行一个占用大量物理内存的C程序,我想调试这些大量分配发生在哪里。这个程序有多个分支,其中一个分支将RES内存提高到11.0G,如下图所示(htop的截图)。

我的问题是一般情况下如何调试那些大内存分配而不阅读malloc/calloc等的代码?
现在,我通过gdb查看核心转储,但是bt输出并没有告诉我们这些分配发生在哪里。
我正在寻找类似于dotnet转储分析或PerfView的东西。

lf5gs5x2

lf5gs5x21#

我的问题是,一般来说,如何调试那些大内存分配,而不阅读malloc/calloc等代码?
1.阅读malloc等 * 对 * 您的原始问题没有帮助。
1.你想使用堆分析器。TCmalloc支持heap profiling,它可以告诉你很多关于你的应用程序的堆使用情况。还有其他的堆分析器。
这个article可能也会有帮助。
P.S.从现有的core转储中提取堆分析信息是可能的,但很难。而且无论如何,您不太可能找到分配堆栈跟踪。
最好的办法是设置堆分析器并重现问题,而不是尝试在事后恢复信息。

相关问题