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(跳出循环体) —循环里没断点是前提