本文整理自网络资料。
1、要使用gdb调试文件,必须编译时加上-g选项。譬如:
gcc-Wall -g hello.c -o hello
2、启动gdb,载入文件的两种方式:
①gdb ./hello
②gdb; 进入gdb
(gdb)file ./hello(file是gdb内部加载文件的命令,file后跟文件路径,gdb中的命令支持tab补全、上下翻)
3、显示源代码:
list命令,简写为l。
list默认从程序起始位置显示10行代码和其行号,重复使用list时,接着上次显示的位置依次向后显示。
list-:输出上次调用list的位置的前10行代码。
list数字n:列出以数字n为中心的前后共10行代码。
list函数名func:列出函数func前后的10行代码。
setlistsize:设置一次显示源码的行数。
showlistsize:显示listsize设置值。
4、查找:
search/forward-search字符串str:向后查找包含str的行。
reverse-search字符串str:向前查找包含str的行。
5、设置断点:
break命令,简写为b。
break行号n:在n行处设置断点。
tbreak行号n:设置临时断点,只生效一次。
6、查看断点:
infobreakpoints/info break:显示断点信息。
7、清除断点:
clear:清除现在所在位置以后的全部断点。(enable,disable方式忽略)
clear行号n:清除n行处的断点。
8、运行程序:
run命令,简写为r,从程序起始位置开始执行。run后面带的参数传递给正在调试的程序。
continue命令,简写为c,继续运行程序。
finish命令,运行程序直到退出当前函数,并打印函数返回的堆栈地址和返回值等信息。
until,简写为u,运行程序直到退出当前循环。
9、程序跟踪:
watch变量或表达式:当变量或表达式的值改变时,程序暂停。
rwatch变量或表达式:当变量或表达式被读时,程序暂停。
awatch 变量或表达式:当变量或表达式的值被写或被读时,程序暂停。
注:awatch和watch都只能在程序运行中设置,即run之后。
bt:查看函数堆栈。
10、变量显示:
print命令,简写为p。
print变量或表达式:打印变量或表达式的值。
print/x (/f,/s) 变量或表达式:以指定的格式显示变量或表达式的值。
printarr:打印静态数组元素的值。
printarray@len:从array地址显示len字节长度的数据,用于查看动态数组的值,array是起始地址。
whatis/ptype:显示变量类型,后者还支持typedef定义的类型。
display:设置自动显示的变量,当程序暂停或单步跟踪时自动显示这些变量的值。
11、单步执行:
next,简写为n。继续执行下一条语句,但是不进入子函数。
nextn:继续执行下面n条语句。
step:单步执行语句,跟踪到子程序内部,并且打印子程序内部的执行情况。
stepn:单步执行下面的n条语句。
12、结束与退出:
kill命令,简写为k:结束当前调试程序。
quit命令,简写为q,退出gdb。
13、信号:
handleSIGCHLD:显示对SIGCHLD信号的处理。
handle5-10:显示对编号5-10号的信号的处理。
handleSIGCHLD stop/nostop/print/noprint/pass/nopass/ignore/noignore:设置对信号SIGCHLD的处理方式。
infosignals和info handle:查看信号处理方式集合。
13、其他:
在gdb中键入两次tab键显示全部gdb命令。
help命令显示帮助信息。
直接回车表示重复执行上次的命令(但不完全是,比如l ist 10)。
make命令:重新编译程序,与执行shell中的make一样。(同样类似的还有pwd、cd等命令,都跟在shell中执行一样)