本文所述主要是Linux调试工具GDB的使用教程,具体如下。
声明:本博客内容是由本人经过实验楼教程整理得来。
GDB的相关概念
GDB, 是 The GNU Project Debugger 的缩写, 是 Linux 下功能全面的调试工具。GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在 Linux 环境软件开发中,GDB 是主要的调试工具,用来调试 C 和 C++ 程序。
GDB的相关操作
下面给出一个具有buging.c的程序:
[yqtao@localhost linux]$ cat buging.c #include <stdio.h> 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=%d\n",res); }
如果要调试程序,则在进行gcc编译的时候要加上-g参数
gcc -g -o bugging bugging.c
进入gdb:
gdb buging
部分gdb命令:
// 查看源码 // 查看第几行附近 // 可简写成l 2 (gdb) list 2 1 #include <stdio.h> 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 main 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=%d\n",res); 11 } // 设置断点 // break +n在第几行设断点 (gdb) break 8 Breakpoint 1 at 0x4004fa: file buging.c, line 8. // break +函数名 ,在函数名处设断点 (gdb) break getSum Breakpoint 2 at 0x4004cb: file buging.c, line 3. //查看断点信息 (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004004fa in main at buging.c:8 2 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 What 1 breakpoint keep y 0x00000000004004fa in main at buging.c:8
关闭和启用断点:
有时候,我们会遇到这种情况:有些断点可能暂时不用但又不想删除,那么可以disable.
disable +n //关闭断点 enable +n //启动断点
GDB单步调试
以本文开头的buging.c文件为例,进行单步调试。
// 进入gdb [yqtao@localhost linux]$ gdb buging // 在main()函数处设断点 (gdb) info breakpoints // 运行程序 (gdb) run Breakpoint 1, main () at buging.c:9 9 int res=getSum(100);
注意:我们要进入函数要是用step(s),而单步执行next(n),next是不进入函数内部的,要区分两者的关系。
(gdb) step getSum (n=100) at buging.c:4 4 for (i=1;i<=n;i++) // 查看代码 (gdb) l 1 #include <stdio.h> 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=%d\n",res); // 下一步 (gdb) s 5 sum+=i; // 打印sum的值 // 看到sum是为赋初值的 (gdb) p sum $1 = 4195633 // info locals //打印当前断点处所在函数的所有局部变量的值,不包括函数参数。 (gdb) info locals sum = 4195635 i = 3
其余的一些命令:
finish
执行程序到当前函数结束
continue
执行程序到下个断点
until
until N,执行程序到源代码的某一行
总结
以上就是本文关于Linux调试工具GDB使用简易教程的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 黄乙玲1988-无稳定的爱心肝乱糟糟[日本东芝1M版][WAV+CUE]
- 群星《我们的歌第六季 第3期》[320K/MP3][70.68MB]
- 群星《我们的歌第六季 第3期》[FLAC/分轨][369.48MB]
- 群星《燃!沙排少女 影视原声带》[320K/MP3][175.61MB]
- 乱斗海盗瞎6胜卡组推荐一览 深暗领域乱斗海盗瞎卡组分享
- 炉石传说乱斗6胜卡组分享一览 深暗领域乱斗6胜卡组代码推荐
- 炉石传说乱斗本周卡组合集 乱斗模式卡组最新推荐
- 佟妍.2015-七窍玲珑心【万马旦】【WAV+CUE】
- 叶振棠陈晓慧.1986-龙的心·俘虏你(2006复黑限量版)【永恒】【WAV+CUE】
- 陈慧琳.1998-爱我不爱(国)【福茂】【WAV+CUE】
- 咪咕快游豪礼放送,百元京东卡、海量欢乐豆就在咪咕咪粉节!
- 双11百吋大屏焕新“热”,海信AI画质电视成最大赢家
- 海信电视E8N Ultra:真正的百吋,不止是大!
- 曾庆瑜1990-曾庆瑜历年精选[派森][WAV+CUE]
- 叶玉卿1999-深情之选[飞图][WAV+CUE]