1 编译时加入gdb选项:g++ -g hello.cpp -o hello
加入-g参数后,编译生成的可执行文件hello将拥有更大的体积,(相比于不加-g).
2 进入gdb模式:gdb
进入成功后界面如下:
![](https://i-blog.csdnimg.cn/blog_migrate/4455b2720d6437b866172b6c202b8454.png)
也可以在启动gdb时加载一个要调试的可执行文件:gdb hello
3 退出gdb: quit
4 常见的gdb命令:file list next step run c quit ...
使用时可以在gdb模式下,输入: help <commond>,查看命令的用途和用法;
5 file命令详解
file命令用于加载要调试的可执行程序文件,gdb会在启动时所在的目录下寻找可执行文件。
在gdb模式下输入:file hello, 提示如下,则说明file已经成功读取了可执行文件hello中的调试信息,已经准备好接受用户具体的调试命令了。
![](https://i-blog.csdnimg.cn/blog_migrate/04115d17340f837a56c705794ecbe505.png)
6 list命令详解
list命令可以列出可执行文件的源代码的一部分,使用时简写为:l。
6.1 list命令不带参数的用法
gdb模式下,file test01, 然后输入l,将会显示10行源代码,再次输入l,接着显示后面的10行源代码;
6.2 list命令显示指定行前后的源代码内容
输入:l n,将显示第n行的前5行和后4行的源代码;
6.3 list命令显示始末行之间的源代码内容
输入:l n1,n2,n1起始行,n2结束行;闭区间
6.4 list命令带函数名作为参数,显示函数的上下10行内容
list funcname;
7 run命令,简写r
run命令可以在gdb中运行调试中的程序,可以跟一个或多个参数,这些参数可以发给可执行程序;
用法:run arg1 arg2 ...
示例:将test02.cpp编译为test02
![](https://i-blog.csdnimg.cn/blog_migrate/d85143f5da822458c9a310269bbad9c1.png)
gdb test02,输入:run boy gril,运行结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/951aa30b9fde83a63e7f2aa177bd8125.png)
使用:show args,显示传给main函数的参数
![](https://i-blog.csdnimg.cn/blog_migrate/b139b909275b5af8fa2bc1bc5a9dce8a.png)
重新设置传给main函数的参数:
如果我们继续在gdb下输入run,会发现默认传递上一次run传递给main函数的参数boy gril,
改变参数:set args dad mum
![](https://i-blog.csdnimg.cn/blog_migrate/2fd15c1fb61237e8d669ea8835de0028.png)
8 break命令设置断点,命令简写为b
8.1 b linenumber, 例如:b 6; 在第6行添加断点,程序执行完第5行便会停下来;
8.2 b funcname,在函数的第一条语句处停下来,
如果第一条语句仅定义未赋值,例如:int a,b,c;则会跳过(执行)改行语句;