C++GDB 学习

通常用gdb在Linux下调试C/C++程序,编译的时段增长-g选项(gcc
-g
……)。下面总结的凡我好时用(当然也生一些就此的较少)的gdb命令。

(1)开头同退出

  • 开始:gdb program
  • 退出:quit (简写q)或者Ctrl+d

(2)机动补全:Tab

(3)启航程序

  • run(简写r):运行程序直到撞断点
  • 与srart的区分:start会在程序的入口函数(通常是main)设置一个现断点,然后调用run。

(4)断点(breakpoint):简写b

设置断点:

  • break
    函数名叫:在指定函数入口处设置断点
  • break 函数名[or 行号 or 地址] if
    条件(就是一个布尔表达式,但是非需加括号)
  • break 行号:在指定行设置断点
  • break 地址
  • break filename 行号[or
    函数名]
  • break,无参的语会在产一致长条指令处设置断点。

剔除断点:(断点号可由info break获得)

  • delete
    断点号。(也足以去除断点的联谊:delete 2-5)
  • disable 断点号:暂停使用该断点
  • enable 断点号:重新启用该断点
  • clear 行号 or 函数名
    :删除指定地址的保有断点(比如clear
    fun,则去fun函数中有所的断点)
  • delete
    breakpoints:删除所有的断点

(5)打印信息

  • print(简写p):后搭表达式。常用的本:变量,函数
  • display
    表达式。与print的分,使用display设置一个表达式后,在后来的历次单步执行后,都见面输出所设置表达式的价值。

info可以据此来查看寄存器、断点等消息。

  • info registers
    :查看除了浮点寄存器以外的寄存器
  • info all-registers
    :查看有寄存器,包括浮点寄存器
  • info registers <regname ...> :翻看所指定的寄存器
  • info break:查看有断点。
  • info threads:查看着运转程序中的(默认显示所有线程)线程信息

(6)翻开源码

  • list(简写l):查看程序源码,默认显示10实行
  • list
    行号:显示指定为行号为骨干的左右共10行代码
  • list
    函数叫做:显示指定函数的源码,也是10实施
  • list:接着上平等糟糕list命令,继续输出后面的源码
  • list
    -:同齐,但是是于前面挪动。即接着上同一不成list命令显示的代码,输出前面的源码

 (7)跟踪执行

  • step(简写s):单步执行。遇到函数,进入该函数内部。
  • next(简写n):单步执行。遇到函数不见面进来该函数内部。
  • until(简写u):运行程序直到退出循环体。
  • until 行号:运行及负定行。
  • finish(简写fin):运行程序,直到目前函数完成回,并打印函数返回时的仓库地址、返回值、参数值等信息。
  • continue(简写c):继续运行程序直到遇见下一个断点或者程序运行结束。

(8)次第回滚

  • checkpoint
  • restart
    checkpoint-id:将次第回滚到安装该checkpoint的随时
  • info checkpoint:查看有checkpoint,可以取得checkpoint-id

(9)观察点(watchpoint),特殊之断点。

观察点使用watch命令,命令格式和break相同,但她并无是指明断点的职务,而是指明一个表达式,每当该表达式的价改变时,程序就算会叫中止。表达式可以是某某变量、由几变量组成的表达式或者内存地址。

info wachpoints:查看所有观察点。

{捕捉点(catchpoint),也是新鲜之断点。使用某种事件的来作为触发条件。}