GDB常用命令

来源:百度文库 编辑:神马文学网 时间:2024/04/28 02:31:18
在linux的c编程中大家经常用gdb调试程序,以下是一些常用的指令BSD爱好者乐园k6g4at9c3}$k8^
1.break FUNCTIONBSD爱好者乐园b ~O9W8M
在某个函数上设置断点。函数重载时,有可能同时在几个重载的函数上设置了断点BSD爱好者乐园$r:y#~7AeK

g0]?b)z$uxbreak +OFFSETBSD爱好者乐园4^ wE G'im3Q2j|$_Bt
break -OFFSET
_1t4V]4Ok'c在当前程序运行到的前几行或后几行设置断点BSD爱好者乐园e,mH$a?Lz^ N
BSD爱好者乐园Rr-\aOr-o7v?D9u
break LINENUMBSD爱好者乐园esc,n4g7_%OB7Qt
在行号为LINENUM的行上设置断点
D"nvj F_2HtY ^l
_d6_+e,B&Ju N6^break FILENAME:LINENUM
e|?Z-}Zd在文件名为FILENAME的原文件的第LINENUM行设置断点
[7f{&I-Td+Z(R
,F1n8eH0y g0QStbreak FILENAME:FUNCTIONBSD爱好者乐园%o\HJ5Xn|
在文件名为FILENAME的FUNCTION函数上设置断点
W?0IL|当你的多个文件中可能含有相同的函数名时必须给出文件名。BSD爱好者乐园1S5Oa"l$uP,rz
BSD爱好者乐园tFcU^D"u]
break *ADDRESSBSD爱好者乐园 R\Q*b?b
在地址ADDRESS上设置断点,这个命令允许你在没有调试信息的程序中设置断点BSD爱好者乐园8UdOa8A(w/z

*J#LJ-l1Gg{break
(K:Z1dTBo(eJ当break命令不包含任何参数时,break命令在当前执行到的程序运行栈中的BSD爱好者乐园ab!J7X BFf\
下一条指令上设置一个断点。除了栈底以外,这个命令使程序在一旦从当前
)TnI*A7b&e?jx-vw函数返回时停止。相似的命令是finish,但finish并不设置断点。这一点在
HK7GD%D1RO%`h+w^循环语句中很有用。gdb在恢复执行时,至少执行一条指令。
\e)Pp4^%loBSD爱好者乐园7~0o7`:`bc&^?R
break ... if COND
`%UFg"ZU6[这个命令设置一个条件断点,条件由COND指定;在gdb每次执行到此断点时BSD爱好者乐园.qOA;YV$OVb0M
COND都被计算当COND的值为非零时,程序在断点处停止
#T CWs M*r`BPlI
T.QjT'dp+b;Tignore BNUM COUNT
Eo,xC0V7}G设置第BNUM号断点的被忽略的次数为COUNT,即断点BNUM再执行到第COUNT+1BSD爱好者乐园@%LiS1w
次时程序停止BSD爱好者乐园$wis?`4aB
BSD爱好者乐园iyH,qW
tbreak ARGS 或者简写为 tbBSD爱好者乐园kowu6fAk9U
设置断点为只有效一次。ARGS的使用同break中的参量的使用
}6Y)awW
@"N1UT#^1lX;k%chbreak ARGSBSD爱好者乐园}I]3qrR
设置一个由硬件支持的断点。这个命令的主要目的是用于对EPROM/ROM程序的调试
Tm ?/qQ4^E因为这条命令可以在不改变代码的情况下设置断点。这可以同SPARCLite DSU一起
6q+u(^Y K|q使用。当程序访问某些变量和代码时,DSU将设置“陷井”。注意:你只能一次使用BSD爱好者乐园&U7o#c)VyJ$Ep
一个断点,在新设置断点时,先删除原断点
W&h'vX9cEU1f
Z*d6r$`'IdAK Qm5`thbreak ARGSBSD爱好者乐园L:q0S4t @Q;l:zib
设置只有一次作用的硬件支持断点BSD爱好者乐园Yv\?X9EUy\6[n
BSD爱好者乐园5^)yqv"^:A@
rbreak REGEX
2?$AN8mn og-K在所有满足表达式REGEX的函数上设置断点。这个命令在所有相匹配的函数上设置无BSD爱好者乐园Z6_vcg#F _^
条件断点,当这个命令完成时显示所有被设置的断点信息。这个命令设置的断点和
?I P*DA&_break命令设置的没有什么不同。当调试C++程序时这个命令在重载函数上设置断点时
n{ ^7m?(n'F/S}非常有用。BSD爱好者乐园q6h&] S0`7g@;d{~C
BSD爱好者乐园1q7SF+rV
info breakpoints [N]BSD爱好者乐园{3o!Wz(O z)X9\
info break [N]
'{K`6} b&]ijbsinfo watchpoints [N]BSD爱好者乐园H(x-J'}g5ea
显示所有的断点和观察点的设置表,有下列一些列
l9o)w"hIe|*Breakpoint Numbers*----断点号BSD爱好者乐园seCpxni7_0RZ J
*Type*----断点类型(断点或是观察点)
$Ej,C)f0`!A*Disposition*---显示断点的状态
EK5[4Um*Enabled or Disabled*---使能或不使能。y表示使能,n表示不使能。BSD爱好者乐园'\0ga2S7k/V N[Y
*Address*----地址,断点在你程序中的地址(内存地址)BSD爱好者乐园u,JVxW?UAl)?!? S
*What*---地址,断点在你程序中的行号。
mqq{X)}如果断点是条件断点,此命令还显示断点所需要的条件。
^&U+iUl$P9h带参数N的info break命令只显示由N指定的断点的信息。BSD爱好者乐园N]c1w!w7Uvb
此命令还显示断点的运行信息(被执行过几次),这个功能在使用ignoreBSD爱好者乐园jGJD;J,?
命令时很有用。你可以ignore一个断点许多次。使用这个命令可以查看断点
^J4f9THN!e!Y被执行了多少次。这样可以更快的找到错误。
L1L;JCrz
k'KBb3VFGmaint info breakpointsBSD爱好者乐园3q/} tTp { r4J
显示所有的断点,无论是你设置的还是gdb自动设置的。
j?'Z#t0\x|断点的含义:BSD爱好者乐园x,Z5n"Rg#\e-F
breakpoint:断点,普通断点BSD爱好者乐园;k@DMY'ES_+]
watchpoint:普通观察点BSD爱好者乐园0x1a"p b;U_4Q*`
longjmp:内部断点,用于处理longjmp调用BSD爱好者乐园mh-PY5W]Z3Cx
longjmp resume:内部断点,设置在longjmp调用的目标上BSD爱好者乐园Ok9` A q1S(?0k
until:until命令所使用的内部断点
.s?~P aBVfinish:finish命令所使用的内部断点BSD爱好者乐园[[*@;p.t/r?D_V:K6dd4u
BSD爱好者乐园rTVa+V
2.watch EXPRBSD爱好者乐园Q,@.~Q lw5w!a?y X
为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。BSD爱好者乐园?TS1CyXfJ
这个命令使用EXPR作为表达式设置一个观察点。GDB将把表达式加入到程序中并监
n)viN1N\视程序的运行,当表达式的值被改变时GDB就使程序停止。这个也可以被用在SPARCliteBSD爱好者乐园oZFN&\2v/B
DSU提供的新的自陷工具中。当程序存取某个地址或某条指令时(这个地址在调试寄BSD爱好者乐园FK#lfb
存器中指定),DSU将产生自陷。对于数据地址DSU支持watch命令,然而硬件断点寄BSD爱好者乐园&n_HA(KM
存器只能存储两个断点地址,而且断点的类型必须相同。就是两个rwatch型断点
jg H b]L(j}m或是两个awatch型断点。
L;J6M{3~K
Kg4[3G7q#AsIrwatch EXPR
3g0G#[l ~8N1Aa?w6c设置一个观察点,当EXPR被程序读时,程序被暂停。
@C%o@*V'M
X8K-xe&imawatch EXPR
v4] u%cy'\2\XB设置一个观察点,当EXPR被读出然后被写入时程序被暂停。
dp.t&Y.`
X*V4[ c;B{ }info watchpoints
;PO4z6[F:^i在多线程的程序中,观察点的作用很有限,GDB只能观察在一个线程中的表达式的值
$l uS ip$s4D9_如果你确信表达式只被当前线程所存取,那么使用观察点才有效。GDB不能注意一个
)nC?'y6Q;@GI非当前线程对表达式值的改变。
2|[z8P+x7e i&@BSD爱好者乐园%??!dYZ%aW&w)p
rwatch BSD爱好者乐园VLN6O5{ j o&cR}k
当表达式(变量)expr被读时,停住程序。BSD爱好者乐园[b*\!v:I:h%N
BSD爱好者乐园/q3If.V7o
awatch
:p9Pg#WL!?当表达式(变量)的值被读或被写时,停住程序。BSD爱好者乐园hE4gvJ$|$_-Q

9ziB2}Yinfo watchpointsBSD爱好者乐园-Nx1n-G VI uE$I
列出当前所设置了的所有观察点。BSD爱好者乐园h]${?pr IE
BSD爱好者乐园'f.l*_8cE
BSD爱好者乐园:a9`HM7^gOX m
3.catch EXCEPTIONS
8t;s1i'^?KNb/D'r}使用这个命令在一个被激活的异常处理句柄中设置断点。EXCEPTIONS是一个你要抓住BSD爱好者乐园]/q.dvS+i%h
的异常。你一样可以使用info catch命令来列出活跃的异常处理句柄。BSD爱好者乐园5~lc)hfy%qX
BSD爱好者乐园/@%j o:v,W hQ
GDB中对于异常处理由以下情况不能处理:BSD爱好者乐园-e#LEt7}4WL
* 如果你使用一个交互的函数,当函数运行结束时,GDB将象普通情况一样把控制返BSD爱好者乐园tpw\*\k?{F?^
回给你。如果在调用中发生了异常,这个函数将继续运行直到遇到一个断点,一个信号
~tf e'Mii%VCQ"E或是退出运行。BSD爱好者乐园+V4X q,Dy9Co
* 你不能手工产生一个异常( 即异常只能由程序运行中产生 )
2M^e p'KE%cm?p7SZ* 你不能手工设置一个异常处理句柄。BSD爱好者乐园qg%\5yZ
有时catch命令不一定是调试异常处理的最好的方法。如果你需要知道异常产生的BSD爱好者乐园;Qo;Y?Q(L1^0z6OfW
确切位置,最好在异常处理句柄被调用以前设置一个断点,这样你可以检查栈的内容。
]^%}7V?g?l)Y E'n如果你在一个异常处理句柄上设置断点,那么你就不容易知道异常发生的位置和原因。
5jqhg?FG EG要仅仅只在异常处理句柄被唤醒之前设置断点,你必须了解一些语言的实现细节。
ofHEwD{#YBSD爱好者乐园"Y+?2`Cu(F
3.cont N
7B]UI1U6S*wz e第N次经过该断点时才停止程序运行
(tu3l j+|%K*}
y8P:wrD$\0V2M4.enable 断点编号BSD爱好者乐园x\c2o-b`8z"V0p3P%O6K
恢复暂时失活的断点,要恢复多个编号的断点,可用空格将编号分开
9Z#{U~&K%EBSD爱好者乐园\ o7u#H9oBd0z$` I
5.disable 断点编号
I3f)\F$[%VV使断点失效,但是断点还在
I#pB Zh/p0ErJ6FBSD爱好者乐园,rDi-Zn b
6.delete 断点编号或者表达式
@&`!wP(G+N$]删除某断点BSD爱好者乐园t,{)b/d6~M3Y#g
BSD爱好者乐园?2JC!W,\)o
7.clear 断点所在行号BSD爱好者乐园l9PQhK7a b:A
清除某断点
5uc1k&rCb7y$PBSD爱好者乐园@)nI1}WGqK
8.查看断点列表
%Kf5C+BR ~)?]Finfo break
gB-U&e0jni;V'EBSD爱好者乐园Y`0cN!\(u{
9.watch counter>15
u-V#O tT当counter>15的时候程序终止
jQe^ Id
|3f`:r$Lz ^10.当程序崩溃的时候linux会生成一个core文件,可以用
j#z3Q N4waO{gdb a.out coreBSD爱好者乐园.XQ2@jp:UO0A
whereBSD爱好者乐园%FC?gT+je.I'}
查看导致崩溃的原因
$sB.l%k9\,XY
f,ON$CE11.continue
P$f LQ l9eswDs恢复程序运行,直到遇到下一个断点BSD爱好者乐园aH(L*rk*_Z XR1{
BSD爱好者乐园 hj'ecL
12.runBSD爱好者乐园~q9|zs0~x
程序开始运行,直到遇到断点BSD爱好者乐园%K$wI RW7CH#Y%TV

Ul?;g;cs!g)N3o4B13.stepBSD爱好者乐园} ^,b \y
执行一行代码
,D:`-D6uhvX
c'p'K P5@%?14.next
T1p MDP和s不同的是他不跟踪到代码的内部,一步一步执行代码
,C1BL"G"n?RG9ix_T
nM8a8yv5N-RD9W2N15.直接回车为执行上一个命令BSD爱好者乐园"[Y-]'GMn+E r:uK&mL

'iUP7z.c%K16.print 变量
W5R |?\z#iue打印某一变量的值BSD爱好者乐园$Np4U{]f;o*o{b
BSD爱好者乐园'c~+F2Y\p q-w;py(M$j
17.display 变量BSD爱好者乐园?xP;f,A Ij7i
每次运行到断点就显示变量的值,用于观察变量的变化
fr2HIC+z*{ t
5`X8mI&i)~R#D18.set 变量=BSD爱好者乐园^B4s?(|)z]J1~
在程序执行中重新设置某变量的值BSD爱好者乐园Z+^?C~5Y[o_;G6Q]

-u"I mAm19.printf %2.2s ,(char*)0x120100fa0
\Q.`:J+CIXjz结果打印出:He
#bkm7X3[,e,N_YK&j
r!V,baH'qaN(zh20. 设置gdb的列宽,以下为将屏幕设置为70列
u?h!d7W#VZset width 70
9FlF{/?1|
7d\!~q+gN3yT@21. info args 列出你程序所接受的命令行参数
&F&_5}GOinfo registers列出寄存器的状态
y9f$Z/T&n,kI6[Y1dinfo breakpoint列出在程序中设的断点
&S;`+Vxp'P要获得详细的关于info的信息用help info.
#mr3ZqE|nBSD爱好者乐园#jo8js7rOz
22. setBSD爱好者乐园Vl_s1~A!ed
这个命令用来为你的程序设置一个运行环境(使用一个表达式)。
8u8qo)P)`set prompt $把gdb的提示符设为$.
/y#PT*e _`set args 可指定运行时参数。(如:set args 10 20 30 40 50)BSD爱好者乐园%GROFY"mVV-bQA
show args 命令可以查看设置好的运行参数。BSD爱好者乐园&Z+uA(M0D"a(y7^6W
BSD爱好者乐园G0eD8@n7ywi
23. showBSD爱好者乐园*bp)|#yQQ%c
show命令用来显示gdb自身的状态。BSD爱好者乐园Qb0l,u'@.A4M
使用set命令可以改变绝大多数由show显示的信息
4a/eFbX KGg使用show radix命令来显示基数
S1dm+@[?YHY用不带任何参变量的set命令可以显示所有可以设置的变量的值
-v)PO6HQ#I+lp U,b]有三个变量是不可以用set命令来设置的:
7PY7Q5Tfd$b?L2W;\show version显示gdb的版本号
-{9^G,` sgshow copying显示版权信息
'Eo C]\2B1@gshow warranty显示担保信息