gdb调节和测量检验方法,GDB常用命令

平时选择gdb在Linux下调节和测验C/C++程序,编译的时候加多-g选项(gcc
-g
……)。上边总计的是本人要好平常使用(当然也可能有一部分用的可比少)的gdb命令。

gdb是多个由GNU开源公司揭橥的、UNIX/LINUX操作系统下的、基于命令行的、效率庞大的程序调节和测量试验工具。

GDB常用命令

(1)早先及退出

启动gdb

  • 使用gdb从前,供给讲程序编写翻译出带Debug消息的格式。(带上 -g 参数)

**-g ** Produce debugging information in the operating system’s
native
format (stabs, COFF, XCOFF, or DWARF). GDB can work with this
debugging information.

对C/C++程序的调度,必要在编写翻译前就增加-g选项:

$ g++ -g hello.cc -o hello

调护治疗可试行文件:(可带参数)

$ gdb <program> <args>

运行

run(简写r):
运营程序,当蒙受断点后,程序会在断点处截止运作,等待用户输入下一步的下令。
continue(简写c):继续实践,到下一个断点处(或运转甘休)
next(简写n):
单步追踪程序,当境遇函数调用时,直接调用,不进来此函数体;
step(简写s):单步调试即便有函数调用,则跻身函数;与命令n差别,n是不进去调用的函数的
until:运营程序直到退出循环体; / until+行号: 运营至某行
finish:
运转程序,直到近些日子函数实现再次来到,并打字与印刷函数重临时的库房地址和重返值及参数值等新闻。
call 函数(参数):调用“函数”,并传递“参数”,如:call gdb_test(55)
quit:简记为 q ,退出gdb

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

gdb命令

安装断点

break n(简写b n):在第n行处设置断点 ;能够带上代码路线和代码名称: b
OAGUPDATE.cpp:578)
break func:在函数func()的入口处设置断点,如:break cb_button
delete 断点号n:删除第n个断点
disable 断点号n:暂停第n个断点
enable 断点号n:开启第n个断点
clear 行号n:清除第n行的断点
info breakpoints(简写info b) :展现当前程序的断点设置景况

(2)自动补全:Tab

运行

  • run:简记为 r
    ,其职能是运作程序,当遭逢断点后,程序会在断点处甘休运维,等待用户输入下一步的一声令下。
  • continue (简写c ):继续奉行,到下八个断点处(或运维甘休)
  • next(简写
    n):,单步追踪程序,当境遇函数调用时,也不进去此函数体;此命令同
    step 的第一差异是,step
    遭受用户自定义的函数,将步进到函数中去运转,而 next
    则一向调用函数,不会进来到函数体内。
  • step
    (简写s):单步调节和测验如若有函数调用,则跻身函数;与命令n不一样,n是不进来调用的函数的
  • until:当您不喜欢了在三个循环体内单步追踪时,这一个命令可以运作程序直到退出循环体。
  • until+行号: 运转至某行,不独有用来跳出循环
  • finish:
    运营程序,直到当前函数完毕重返,并打字与印刷函数再次回到时的库房地址和重返值及参数值等音信。
  • call 函数(参数):调用程序中可知的函数,并传递“参数”,如:call
    main(55)
  • quit:简记为 q ,退出gdb

查看源代码

list(简写l):列出程序的源代码,暗中认可每一回彰显10行。
list 行号:将显稳当前文件以“行号”为着力的光景10行代码,如:list 12
list 函数名:将显示“函数名”所在函数的源代码,如:list main
list :不带参数,将随即上二遍 list 命令的,输出上面的故事情节。

(3)初步程序

安装断点

  • break n (简写b n):在第n行处设置断点(能够带上代码路线和代码名称)
  • b fn1 if a>b:条件断点设置
  • break func(break缩写为b):在函数func()的入口处设置断点,如:break
    cb_button
  • delete 断点号n:删除第n个断点
  • disable 断点号n:暂停第n个断点
  • enable 断点号n:开启第n个断点
  • clear 行号n:清除第n行的断点
  • info b (info breakpoints) :显示当前先后的断点设置情状
  • delete breakpoints:清除全数断点

打字与印刷表明式

print 表明式:简记为 p
,在那之中“表明式”能够是别的当前正在被测量检验程序的有效性表明式,举个例子当前正值调节和测量检验C语言的次序,那么“表明式”能够是另外C语言的管用表明式,富含数字,变量以致是函数调用。
print a:将显得整数 a 的值
print ++a:将把 a 中的值加1,并显示出来
print name:将展现字符串 name 的值
print gdb_test(22):将以莫西干发型22当做参数调用 gdb_test() 函数
print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数

display
表明式:在单步运维时将那一个有用,使用display命令设置两个表明式后,它将在每一遍单步进行指令后,紧接着输出被安装的表明式及值。如:
display a
watch
表达式:设置二个监视点,一旦被监视的“表明式”的值改变,gdb将强行终止正在被调理的顺序。如:
watch a

  • run(简写r):运行程序直到蒙受断点
  • 与srart的差距:start会在先后的入口函数(日常是main)设置一个一时断点,然后调用run。

查看源代码

  • list :简记为 l ,其职能正是列出程序的源代码,暗中同意每趟显示10行。
  • list 行号:将显示当前文件以“行号”为主干的光景10行代码,如:list 12
  • list 函数名:将显得“函数名”所在函数的源代码,如:list main
  • list :不带参数,将跟着上一回 list 命令的,输出上边的内容。

询问运维消息

where/bt :当前运作的库房列表
set args 参数:内定运营时的参数
show args:查看设置好的参数
info program: 来查看程序的是或不是在运作,进度号,被暂停的原故

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

打字与印刷表达式

  • print 表达式:简记为 p
    ,在这之中“表达式”能够是任何当前正值被测验程序的卓有功效表明式,比如当前正在调节和测量检验C语言的主次,那么“说明式”能够是另外C语言的有用表达式,包罗数字,变量以致是函数调用。
  • print a:将展现整数 a 的值
  • print ++a:将把 a 中的值加1,并展现出来
  • print name:将显示字符串 name 的值
  • print gdb_test(22):将以大背头22用作参数调用 gdb_test() 函数
  • print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数
  • display
    表明式:在单步运转时将丰富有用,使用display命令设置贰个表达式后,它就要历次单步进行指令后,紧接着输出被设置的表明式及值。如:
    display a
  • watch
    表明式:设置叁个监视点,一旦被监视的“表明式”的值改动,gdb将强行终止正在被调护医疗的程序。如:
    watch a
  • whatis :查询变量或函数
  • info function: 查询函数
  • 增加info locals: 呈现当前货仓页的有所变量

分割窗口

layout:用于私分窗口,能够单方面翻看代码,一边测验:
layout src:展现源代码窗口
layout asm:突显反汇编窗口
layout regs:展现源代码/反汇编和CPU寄存器窗口
layout split:显示源代码和反汇编窗口
Ctrl + L:刷新窗口

 

Posted by: 大CC | 11JUL,2014
博客:blog.me115.com
[订阅]
微博:博客园新浪

安装断点:

查询运维消息

  • where/bt :当前运转的旅社列表;
  • bt backtrace 彰显当前调用仓库
  • up/down 改造仓库展现的深浅
  • set args 参数:钦点运维时的参数
  • show args:查看设置好的参数
  • info program: 来查看程序的是还是不是在运作,进度号,被搁浅的原因。
  • break
    函数名:在内定函数入口处设置断点
  • break 函数名[or 行号 or 地址] if
    条件(正是三个布尔表明式,可是无需加括号)
  • break 行号:在钦定行设置断点
  • break 地址
  • break filename 行号[or
    函数名]
  • break,无参的话会在下一条指令处设置断点。

细分窗口

  • layout:用于私分窗口,能够单方面查看代码,一边测验:
  • layout src:显示源代码窗口
  • layout asm:展现反汇编窗口
  • layout regs:展现源代码/反汇编和CPU存放器窗口
  • layout split:彰显源代码和反汇编窗口
  • Ctrl + L:刷新窗口

参考自:http://linuxtools-rst.readthedocs.io/zh\_CN/latest/tool/gdb.html


剔除断点:(断点号可由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),也是极度的断点。使用某种事件的发出作为触发条件。}

 

相关文章