1.使用-g参数生成的目标才能用gdb命令
> gcc -g test.c -o test
2.基本命令
list(l) |
|
list LINENUM |
列出当前文件中LINENUM周围的行(上下5行) |
list FILE:LINENUM |
列出在FILE文件中的LINENUM的周围的的行 |
list FUNCTION |
列出当前文件FUNCTION函数的开始部分 |
list FILE:FUNCTION |
列出再FILE文件中的FUNCTION函数的开始部分 |
start |
开始调试程序, 运行到程序中的main函数的开始为止 |
run(or r) |
执行下一条(或执行N条语句), 相当于VC中的F10. (不进入函数内部执行), 缩写命令为: n |
next(or n) N |
执行下一条(或执行N条语句), 相当于VC中的F10. (不进入函数内部执行), 缩写命令为: n |
step(or s) N |
执行下一条(或执行N条语句), 相当于VC中的F11. (进入函数内部执行), 缩写命令为: s |
backtrace(or b) [-]N |
打印所有的调用栈(或者最内层的N层, 或者最外层的-N层,加个负号即可), 缩写命令为: bt |
frame(or f) N |
选择和打印相应堆栈, N可以是栈的序号, 也可是栈的地址. 参考info frame. |
info locals |
查看当前栈帧局部变量的值. 或者简写为 I locals. |
finish |
执行到当前函数返回,然后停下来等待命令 |
print(或p)NUM[=num] |
打印表达式的值,通过表达式可以修改变量的值或者调用函数 |
set [var] Variable=NUM |
修改变量的值 |
break(or b) 行号 |
在某一行设置断点 |
break 函数名 |
在某个函数开头设置断点 |
break...if... |
设置条件断点 |
continue(or c) |
从当前位置开始连续而非单步执行程序 |
delete breakpoints |
删除断点 |
display 变量名 |
跟踪查看一个变量,每次停下来都显示它的值 |
disable breakpoints |
禁用断点 |
enable breakpoints |
启用断点 |
info(or i) breakpoints |
查看当前设置了哪些断点 |
run(or r) |
从头开始连续而非单步执行程序 |
undisplay |
取消对先前设置的那些变量的跟踪 |
watch |
设置观察点 |
I watchpoints |
查看当前设置了哪些观察点 |
x |
从某个位置开始打印存储器的一段内容,全部当成字节来看,而不区分哪些字节属于哪些变量. 形式为: |
2.设置环境
set
args 可指定运行时参数。(如:set
args 10 20 30 40 50)
show args 命令可以查看设置好的运行参数。
path
<dir> 可设定程序的运行路径。
show paths 查看程序的运行路径。
set environment varname [=value] 设置环境变量。如:set
env USER=hchen
show environment [varname] 查看环境变量。
cd
<dir> 相当于shell的cd命令。
pwd 显示当前的所在目录。
程序的输入输出。 使用重定向控制程序输出。如:run
> outfile。start < infile
3.断点相关命令
命 令 |
参 数 含 义 |
说 明 |
break |
断点位置 |
设置程序断点 |
tbreak |
断点位置 |
设置临时断点,触发一次后自动删除 |
hbreak |
断点位置 |
设置硬件断点,必须要有硬件的支持 |
thbreak |
断点位置 |
设置临时硬件断点 |
rbreak |
正则表达式 |
在与正则表达式匹配的函数入口上设置断点 |
info breakpoints |
|
查看断点设置情况 |
watch |
监视点表达式 |
设置写监视点 |
rwatch |
监视点表达式 |
设置读监视点 |
awatch |
监视点表达式 |
设置访问监视点 |
info watchpoints |
|
查看监视点设置情况,等价于info breakpoints 命令 |
set can-use-hw-watchpoints |
布尔值 |
设置是否能够使用硬件断点 |
show can-use-hw-watchppints |
|
显示能否使用硬件断点,0不可以,1可以 |
catch event |
要捕捉的事件:比如throw catch exec fork 等 |
捕捉程序运行时发生的事件,目前不支持 |
clear |
函数名 行号或者地址 |
删除断点 |
delete [breakpoints][range…] |
断点号或者断点号范围 |
删除断点 |
disable[breakpoints][range…] |
断点号或者断点号范围 |
禁用断点 |
enable [breakpoints][range…] |
断点号或者断点号范围 |
使能断点 |
enalbe[breakpoints]once range…. |
断点号或者断点号范围 |
使能断点一次 |
enable [breakpoints] delete range …. |
断点号或者断点号范围 |
使能断点一次,触发断点一次后,将其删除 |
break ….if cond |
断点号或者断点号范围 |
仅当条件为真时,断点有效 |
condition bnum expression |
断点号 |
仅当条件为真时,断点有效 |
ignore bnum count |
程序执行经过断点的次数 |
bnum 断点号 忽略count次经过断点 |
commands [bnum] ……command-list…. end |
断点号 |
设置断点命令列表 |
4.调试已运行的程序
两种方法:
4.1在UNIX下用ps查看正在运行的程序的PID(进程ID),然后用gdb
<program> PID格式挂接正在运行的程序。
4.2先用gdb
<program>关联上源代码,并进行gdb,在gdb中用attach命令来挂接进程的PID。并用detach来取消挂接的进程。