请问有没有人能够快速概述或者提供一些文档,告诉我如何检查C程序的堆栈(和堆)?我认为这应该使用GDB来完成,但如果有其他更简单的替代方案,那也可以。
谢谢。
请问有没有人能够快速概述或者提供一些文档,告诉我如何检查C程序的堆栈(和堆)?我认为这应该使用GDB来完成,但如果有其他更简单的替代方案,那也可以。
谢谢。
你可以使用 'x' 命令来转储原始内存。
因此,如果想要查看堆栈或堆的位,请尝试以下操作:
x/10b &stackvar
x/200b &heapvar-20
最后一个将显示从heapvar之前20个字节开始的200个字节。因此,如果您刚刚malloc了它,您还可以看到堆头
查看调用堆栈:
gdb> backtrace
查看当前堆栈帧:
gdb> info frame
查看当前堆栈帧的参数:
gdb> info args
查看当前堆栈帧的局部变量:
gdb> info locals
导航至父堆栈帧:
gdb> frame 1
使用GDB进行调试的第一步是设置断点。具体操作如下:
prompt> gdb ./x_bstree.c
(gdb) #prompt
(gdb) b 123 #break at line 123
(gdb) r #start program
print
检查堆栈或堆中的变量。对于堆栈变量,只需使用print <varname>
。对于堆变量(指针),请使用print <*varname>
。不确定有没有什么特殊的方法来检查堆栈/堆变量?ddd
。 ddd手册
好的,也许我可以稍微解释一下。我这样使用它。gcc -g program.c -o program
运行ddd
:
ddd program
在GUI中,您可以执行各种操作,如查看机器代码、查看内存等等。浏览一下。
在手册中还有一个检查堆栈的部分。ddd
为您提供了一个很好的界面来检查C程序。
core_analyzer 包含 gdb 插件和独立工具。
最新版本只包含 gdb 插件。
gdb 插件 命令显示内存统计信息。
(gdb)
heap [/verbose or /v] [/leak or /l]
heap [/block or /b] [/cluster or /c] <addr_exp>
heap [/usage or /u] <var_exp>
heap [/topblock or /tb] [/topuser or /tu] <num>
独立工具有水平搜索和垂直搜索功能,可能符合您的期望。
[0] Print General Core Information
[1] Find References to an Object (horizontal search)
[2] What Is This Address and Underlying Object Type (vertical search)
[3] Objects Shared Between Threads
[4] Memory Pattern Analysis
[5] Query Heap Memory Block
[6] Page Walk (check the integrity of surrounding memory blocks)
[7] Heap Walk (check the whole heap for corruption and memory usage)
[8] Biggest heap memory blocks
[9] Biggest Heap Memory Owners (variables)
[10] Heap Memory Leak Candidates
[11] Quit