gdb调试器
来源:互联网 发布:条形码生成软件 编辑:程序博客网 时间:2024/06/07 21:27
程序的调试工作在整个程序的开发过程中占据了相当大的比例。使用 gcc 调试 C 程序时,只能依靠 gcc 发出的警告或错误信息来进行,所以调试的效率非常低。
为此,GNU 开发了 GDB 调试器(GNU Debugger)。GDB 的调试功能非常强大,甚至可以和 Visual C++、Visual Basic、Jbuilder 等开发工具的调试器相媲美。但 GDB 的
缺点
是没有图形调试界面。尽管如此,对于从事嵌入式 Linux 应用开发的人员还是有必要知道 GDB
的使用方法的。
1)查看源文件
在调试程序时,gcc 会给出产生警告或错误的代码行数。但在普通的文本环境中是无法直接获得语句行数的。在 GDB 中通过命令 l(list 的缩写)可以查看所有的代码行数
GDB 以 10 行为单位进行显示。再运行一次命令 l 就会显示下 10 行代码。这
样设计方便了源代码的阅读。
(2)设置断点
断点是调试程序的重要方法,通过断点可以知道程序每一步的执行状况(比如当前变量的值、函数是否调用、堆栈使用情况等)。在 GDB 中通过命令 b(breakpoint 的缩写)
进行
断点设置。如下所示:
(gdb) b 7
Breakpoint 1 at 0x8048389: file test.c, line 7.
可以看到,命令 b 在程序的第 7 行处设置了第一个断点,并显示了该断点在内存中的物
理地址。
(3)查看断点情况
由于使用命令 b 可以设置多个断点,所以用户需要能够随时查看各个断点的情况。在
GDB 中通过命令“info b”查看所有的断点情况。如下所示:
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048389 in cal at test.c:7
可以看到,GDB 在程序的第 7 行处设置了第一个断点,并显示了断点的位置信息。(4)运行程序
在 GDB 中通过命令 r(run 的缩写)运行程序。GDB 默认从代码的首行开始运行(也可以通过“r 行数”的方式让程序从指定行数开始运行)。如果程序中有断点,则程序会在断
点行数的前一行暂停运行,结果如下所示:
(gdb) r
Starting program: /home/test
Breakpoint 1, cal (n=5) at test.c:7 7 return n * cal(n - 1);
可以看到,程序在运行到第 7 行时就暂停了,没有继续执行第 8 行的代码。
(5)查看变量值
程序暂停运行后就可以查看当前的状态了。在 GDB 中通过命令“p 变量名”(print 的
缩写)查看当前变量 n 的值。如下所示:
(gdb) p n $1 = 5
GDB 通过“$N”(“$1”、“$2”)来显示变量的值。这样在下次查看变量值时,就可以用
“$N”代替变量名了。可以看到,当前变量 n 的值为 5。
(6)继续运行程序
查看完当前程序的情况后,就可以让程序继续往下运行了。在 GDB 中通过命令 c 让程序继续往下运行。在 test.c 中,由于函数 cal 是递归调用运行,所以程序会再次在断点处
暂停。如下所示:
(gdb) c Continuing.
Breakpoint 1, cal (n=4) at test.c:7 7 return n * cal(n - 1);
程序暂停后可以再次查看当前变量 n 的值。如下所示:
(gdb) p n $2 = 4
(7)单步运行
在程序逻辑比较复杂的时候往往需要程序能一步一步的往下运行,但如果每行都设置一个断点的话又会很麻烦。在 GDB 中可以通过命令 s(step 的缩写)和 n(next 的缩写)
让程序一步一步的往下运行。其中 s 可以在发生函数调用时进入函数内部运行,而 n 不会进入函数内部运行。在 test.c 中。由于函数 cal 是递归调用运行,所以只能选择 s 才
能看到变量 n 的值。如下所示:
(gdb) s
cal (n=3) at test.c:4 4 if(n == 1) (gdb) s
Breakpoint 1, cal (n=3) at test.c:7 7 return n * cal(n - 1); (gdb) s
cal (n=2) at test.c:4 4 if(n == 1) (gdb) s
Breakpoint 1, cal (n=2) at test.c:7 7 return n * cal(n - 1); (gdb) s
cal (n=1) at test.c:4
4 if(n == 1)
(gdb) s
5 return 1;
由于在使用 s 前函数 cal 已经调用了两次,所以运行 s 后当前变量 n 的值为 3。可以看到,函数 cal 进行 3 次调用后返回了值 1。
此外,GDB 还具有很多的功能,比如程序环境设置、使用 shell 命令等。
- GDB 调试器使用手册
- GDB 调试器使用手册
- GDB 调试器使用手册
- GDB 调试器使用手册
- GDB调试器使用手册
- gdb调试器
- GDB 调试器使用手册
- gdb - GNU 调试器
- Gdb调试器(读书笔记)
- 使用GDB调试器
- gdb 调试器
- 调试器GDB小结
- GDB调试器
- GDB调试器
- 调试器GDB
- gdb - GNU 调试器
- 调试器GDB
- Gdb调试器
- java-反射机制-简单代码
- Tomcat配置,修改端口号,命令行启动
- c语言的三种数字排序方法
- SA17225160_李伯威(libowei)_高级软工第三次实验报告
- 拦截器的执行顺序
- gdb调试器
- 学习PHP静态化笔记
- Unity_DOTween动画的学习(八)_动画的生命周期和生命周期函数
- 团圆的中秋, 我一个人在code
- Ros_1
- Java 多线程(PART I)进程和线程
- WmS工作原理
- Ros_2
- vue-cli项目以及普通静态网页如何部署到github pages