Linux调试工具GDB使用教程

本文主要介绍了linux调试工具gdb使用简易教程,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下,希望能帮助到大家。

声明:本博客内容是由本人经过实验楼教程整理得来。

GDB的相关概念

GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具。GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在 Linux 环境软件开发中,GDB 是主要的调试工具,用来调试 C 和 C++ 程序。

GDB的相关操作

下面给出一个具有buging.c的程序:

[yqtao@localhost linux]$ cat buging.c #include int getSum(int n) {    int sum=0,i;    for (i=1;i<=n;i++)        sum+=i;    return sum;}int main(){    int res=getSum(100);    printf("1+2+...+100=%dn",res);}

如果要调试程序,则在进行gcc编译的时候要加上-g参数

gcc -g -o bugging bugging.c

进入gdb:

gdb buging

部分gdb命令:

Linux调试工具GDB使用教程

// 查看源码// 查看第几行附近// 可简写成l 2(gdb) list 2   1    #include 2    int getSum(int n) {3        int sum=0,i;4        for (i=1;i<=n;i++)5            sum+=i;6        return sum;7    }// 查看main函数附近的源码(gdb) list main3        int sum=0,i;4        for (i=1;i<=n;i++)5            sum+=i;6        return sum;7    }8    int main(){9        int res=getSum(100);10       printf("1+2+...+100=%dn",res);11   }// 设置断点// break +n在第几行设断点(gdb) break 8Breakpoint 1 at 0x4004fa: file buging.c, line 8.// break +函数名 ,在函数名处设断点(gdb) break getSumBreakpoint 2 at 0x4004cb: file buging.c, line 3.//查看断点信息(gdb) info breakpoints Num   Type      Disp Enb Address      What1    breakpoint   keep y  0x00000000004004fa in main at buging.c:82    breakpoint   keep y  0x00000000004004cb in getSum at buging.c:3

断点信息中每一项的信息:

1.Num 列代表断点编号,该编号可以作为 delete/enalbe/disable 等控制断点命令的参数
2.Type 列代表断点类型,一般为 breakpoint
3.Disp 列代表断点被命中后,该断点保留(keep)、删除(del)还是关闭(dis)
4.Enb 列代表该断点是 enable(y) 还是 disable(n)
5.Address 列代表该断点处虚拟内存的地址
6.What 列代表该断点在源文件中的信息

// 删除断点// delete +n 或 d +n// 如果不加数字则删除全部的断点(gdb) d 2(gdb) info breakpoints Num   Type      Disp Enb Address      What1    breakpoint   keep y  0x00000000004004fa in main at buging.c:8

关闭和启用断点:

有时候,我们会遇到这种情况:有些断点可能暂时不用但又不想删除,那么可以disable.

disable +n //关闭断点enable +n  //启动断点

GDB单步调试

以本文开头的buging.c文件为例,进行单步调试。

黑点工具 黑点工具

在线工具导航网站,免费使用无需注册,快速使用无门槛。

黑点工具 18 查看详情 黑点工具

// 进入gdb[yqtao@localhost linux]$ gdb buging// 在main()函数处设断点(gdb) info breakpoints // 运行程序(gdb) runBreakpoint 1, main () at buging.c:99        int res=getSum(100);

注意:我们要进入函数要是用step(s),而单步执行next(n),next是不进入函数内部的,要区分两者的关系。

(gdb) stepgetSum (n=100) at buging.c:44        for (i=1;i<=n;i++)// 查看代码(gdb) l1    #include 2    int getSum(int n) {3        int sum=0,i;4        for (i=1;i<=n;i++)5            sum+=i;6        return sum;7    }8    int main(){9        int res=getSum(100);10       printf("1+2+...+100=%dn",res);// 下一步(gdb) s5            sum+=i;// 打印sum的值// 看到sum是为赋初值的(gdb) p sum$1 = 4195633// info locals//打印当前断点处所在函数的所有局部变量的值,不包括函数参数。(gdb) info localssum = 4195635i = 3

其余的一些命令:

finish

执行程序到当前函数结束

continue

执行程序到下个断点

until

until N,执行程序到源代码的某一行

相关推荐:

用GDB调试nginx

基于Linux调试工具strace与gdb的常用命令总结_PHP教程

Linux+Eclipse+GDB调试PostgreSQL源码

以上就是Linux调试工具GDB使用教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/284106.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何打开Xmind文件
上一篇 2025年11月4日 17:47:21
Java并发场景下:如何确保页面请求版本与数据库或Redis版本一致?
下一篇 2025年11月4日 17:47:23

相关推荐

发表回复

登录后才能评论
关注微信