如何使用GDB探索堆栈/堆? 我正在寻求快速概述/指向我,以记录检查C程序的堆栈(和堆)的方法。我认为应该使用GDB来完成这一点,但是如果还有其他直截了当的

问题描述 投票:0回答:5
倾倒原始内存

因此,如果您想查看堆栈或堆的碎屑,请尝试像

c debugging gdb heap-memory stack-memory
5个回答
20
投票

最后一个将向您展示200个字节,从Heapvar之前的20个字节开始。因此,如果您只是杂乱无章,您也可以看到堆头

视图堆栈:
gdb> backtrace


6
投票
gdb> info frame

当前堆栈框架的观看参数:
gdb> info args

视图当前堆栈框架的本地变量:
gdb> info locals

naveration到父堆栈框架:


gdb> frame 1

验证堆栈
    

我使用GDB进行调试的第一种方法是设置断点。这样就这样做了:

prompt> gdb ./x_bstree.c
(gdb) #prompt
(gdb) b 123 #break at line 123
(gdb) r #start program

现在您的程序停止了程序的第123行。现在,您可以使用

print检查堆栈中的变量或堆。对于堆栈变量,只需使用print <varname>

。对于堆变量(指针),请使用

3
投票
。不确定检查堆栈/堆变量是否有什么特别之处?

对于审核多线程应用程序的课程,您需要以单线程模式进行运行,然后dubug否则很难预测发生的事情。

对于其他任何内容,还有大量的文档
GDB

,许多网站也提供
GDB作弊表
.

使用

dddDDD手册 也许我有点详细说明。我这样用它。 我的程序与调试符号: gcc -g program.c -o program


2
投票

ddd
在GUI中,您可以做各种各样的事情,查看机器代码,查看内存等。环顾四周。 在手册中,还有一部分检查堆栈。 ddd program

为您提供良好的界面 检查C程序。

Core_analyzer
具有GDB插件和独立工具。 最新版本仅是GDB插件。

GDB插件
命令显示内存统计。

ddd

单独使用工具

具有水平搜索和垂直搜索,它可能接近您的期望。
(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
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.