我正在运行一个占用大量物理内存的C程序,我想调试这些大量分配发生在哪里。这个程序有多个分支,其中一个分支将RES内存提高到11.0G,如下图所示(htop的截图)。
我的问题是一般情况下如何调试那些大内存分配而不阅读malloc/calloc等的代码?现在,我通过gdb查看核心转储,但是bt输出并没有告诉我们这些分配发生在哪里。我正在寻找类似于dotnet转储分析或PerfView的东西。
malloc
calloc
bt
lf5gs5x21#
我的问题是,一般来说,如何调试那些大内存分配,而不阅读malloc/calloc等代码?1.阅读malloc等 * 对 * 您的原始问题没有帮助。1.你想使用堆分析器。TCmalloc支持heap profiling,它可以告诉你很多关于你的应用程序的堆使用情况。还有其他的堆分析器。这个article可能也会有帮助。P.S.从现有的core转储中提取堆分析信息是可能的,但很难。而且无论如何,您不太可能找到分配堆栈跟踪。最好的办法是设置堆分析器并重现问题,而不是尝试在事后恢复信息。
core
1条答案
按热度按时间lf5gs5x21#
我的问题是,一般来说,如何调试那些大内存分配,而不阅读malloc/calloc等代码?
1.阅读
malloc
等 * 对 * 您的原始问题没有帮助。1.你想使用堆分析器。TCmalloc支持heap profiling,它可以告诉你很多关于你的应用程序的堆使用情况。还有其他的堆分析器。
这个article可能也会有帮助。
P.S.从现有的
core
转储中提取堆分析信息是可能的,但很难。而且无论如何,您不太可能找到分配堆栈跟踪。最好的办法是设置堆分析器并重现问题,而不是尝试在事后恢复信息。