GDB调试

C++程序员必备知识


什么是GDB??

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

准备工作

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

非调试命令

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

 GDB调试

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

你可能感兴趣的:(笔记,c++,后端)