GDB堆栈跟踪的方法
来源:互联网 发布:加域 找不到网络路径 编辑:程序博客网 时间:2024/04/28 09:58
程序“调用堆栈”是当前函数之前的所有已调用函数的列表(包括当前函数)。每个函数及其变量都被分配了一个“帧”,最近调用的函数在 0 号帧中(“底部”帧)。要打印堆栈,发出命令 'bt'('backtrace' [回溯] 的缩写):
(gdb) bt
#0 0x80483ea in wib (no1=8, no2=8) at eg1.c:7
#1 0x8048435 in main (argc=1, argv=0xbffff9c4) at eg1.c:21
此结果显示了在 main() 的第 21 行中调用了函数 wib()(只要使用 'list 21' 就能证实这一点),而且 wib() 在 0 号帧中,main() 在 1 号帧中。由于 wib() 在 0 号帧中,那么它就是执行程序时发生算术错误的函数。
实际上,发出 'info locals' 命令时,gdb 会打印出当前帧中的局部变量,缺省情况下,这个帧中的函数就是被中断的函数(0 号帧)。可以使用命令 'frame' 打印当前帧。要查看 main 函数(在 1 号帧中)中的变量,可以发出 'frame 1' 切换到 1 号帧,然后发出 'info locals' 命令:
(gdb) frame 1
#1 0x8048435 in main (argc=1, argv=0xbffff9c4) at eg1.c:21
21 result = wib(value, div);
(gdb) info locals
value = 8
div = 8
result = 4
i = 2
total = 6
此信息显示了在第三次执行 "for" 循环时(i 等于 2)发生了错误,此时 "value" 等于 "div"。
可以通过如上所示在 'frame' 命令中明确指定号码,或者使用 'up' 命令在堆栈中上移以及 'down' 命令在堆栈中下移来切换帧。要获取有关帧的进一步信息,如它的地址和程序语言,可以使用命令 'info frame'。
gdb 堆栈命令可以在程序执行期间使用,也可以在 core 文件中使用,因此对于复杂的程序,可以在程序运行时跟踪它是如何转到函数的。
- GDB堆栈跟踪的方法
- GDB堆栈跟踪
- gdb调试之堆栈跟踪
- gdb调试之堆栈跟踪
- 编程工具系列之 ------使用GDB的堆栈跟踪功能
- 编程工具系列之一------使用GDB的堆栈跟踪功能
- gdb的使用(二) 堆栈跟踪、core文件、连接到其它进程
- Linux下gdb调试程序之堆栈跟踪
- 堆栈跟踪:
- 堆栈跟踪
- 把异常的堆栈跟踪输出保存到日志文件的方法
- 解码混淆过的堆栈跟踪信息
- server 内部异常堆栈跟踪的结尾
- gdb里面的堆栈调试命令
- gdb函数堆栈乱掉的解决办法
- [gdb]函数堆栈乱掉的解决办法
- GDB 的常用命令 -- 用gdb 跟踪、调试 chromium webkit_unit_tests
- 跟踪代码的方法
- PHP-比较运算符- == 和 ===
- 用qemu搭建基于arm和linux的嵌入式开发环境
- 几个常用的jquery ui框架
- 或许这才是开始
- socket编程几个结构
- GDB堆栈跟踪的方法
- redhat6 nfs的安装和配置
- HDU 1572(暴搜)
- 谁也阻止不了你,谁也给不了你想要的生活。。。。
- 我的团队需要的6中思维模式
- 执行 maven 命令 报错Unable to add module to the current project as it is not of packaging type 'pom'
- 动态规划 之 0-1背包问题
- Linux后台网络编程中select/poll/epoll的比较分析
- 错误描述:fatal error C1010:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include"stdafx.h"”?