C++程序员必备知识

什么是GDB??

* GDB是GNU软件系统社区提供的调试工具,同GCC配套组成一套完整的开发环境,GDB是Linux和许多许多Unix系统中的标准开发环境。
* GDB主要的四个功能:
* 启动程序,可以按照自定义的要求随心所欲的运行程序
* 可以让被调试的程序在所指定位置的断点出停住(断点可以是条件表达式)
* 当程序被停止时,可以检查此时程序所发生的事
* 可以改变程序,将一个BUG产生的影响修正,从而测试其它BUG
准备工作

* 通常,在为调试而编译时,必须关掉编译器的优化现象(-0n),并打开调试选项
-g,另外,’-wall‘在尽量不影响程序行为的情况下打开,提示所有的warning
*
-g选项的作用是在可执行文件中加入源代码信息,比如可执行程序文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证gdb能够找到源文件(-g的文件会比不加的大,而且我们在GDB中查看的时源文件的代码)
非调试命令

* 启动GDB
* gdb 可执行文件
*  查看代码(默认显示10行)
* l/list
* l  行号(函数名) ---->当前文件
* l  文件名:行号(函数名)---->跨文件
*  设置查看代码的行数(针对list)
* show list/listsize
* set     list/listsize   行数
*  设置断点
* b/break
* b  行号(函数名)
* b  文件名:行号(函数名)
* b   行号  if i == 9                        —设置条件断点
* delete/del/l   断点的编号
* info/i                                           —查看所有断点
* i     b                                           —查看断点信息
* dis/display    断点编号                —设置断点无效
* ena/enable   断点编号                —设置断点生效 

 GDB调试

* 运行GDB程序(开始调试的第一步)
* start                                            —程序停在第一行
* run                                              —遇到断点才停
*  继续运行,到下一个断点停
* c/continue
* 向下执行一行代码(遇到函数不会进入函数体)
* n/next
*  变量操作
* p/print     变量名                         —打印变量值
* ptype      变量名                         —打印变量类型
*  向下执行一行代码(遇到函数会进入函数体)
* s/step
* finish(跳出函数体)                      —函数体里没有断点是前提
*  自动变量操作
* display  num                              —自动打印指定变量的值
* i/info      display                         —查看自动打印变量的信息
* undisplay    编号                        —取消自动打印指定变量
*  其它操作
* set     var     变量=变量值
* until(跳出循环体)                        —循环里没断点是前提

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信