GDB DEBUG:
run:r
continue:c
break:b (b anet.c:455 ; b 458; b 464;b 466)
tbreadk:tb 命令用于添加一个临时断点
backtrack: bt
frame:f (f 1; f 2; f 3; 这里依次切换至堆栈1,2,3)
info:info (info b 查看加了哪些断点)
enable :enable
disable :(disable 1 : 则使用 disable 断点编号就可以禁用 这个断点,被禁用的断点可以使用 enable断点编号并重新开启,
如果disable和enable命令不加断点编号,则分别表示禁用和启用 所有断点)
delete:del (del 2 ;使用delete编号可以删除某个断点,如果输入delete时不加命令号,则表示删除所有断点)
list :l(l:次输入list命令时会显示断点前后的10行代码,继续输入list命令时 每次都会接着向后显示10行代码,一直到文件结束;
list+命令:可以从当前代码位置向下显示10行代码;list-命令(即list 减号)可以从当前代码位置向上显示10行代码)
print:p(通过print命令可以在调试过程中方便地查看变量的值,也可以修改当前内存中的变量值
p:/o(octal,八进制显示),x(hex,十六进制显示),d(decimal,十进制显示),u(unsigned decimal,无符号十进制显示),
t(binary,二进制显示),f(float,浮点值显示),a(address),i(instruction),
s(string),z(zero padded on the left,十六进制左侧补0显示))
ptype:ptype(列出了变量的类型,而且详细列出了每个成员变量的字段名)
info threads:命令可以调试多线程程序
thread:thread( thread 2 :切换到线程2,线程2前面就被加上了星号)
info args:命令还可以用来查看当前函数的参数值
until:u(u 2774 :让程序运行到指定的行停下)
finish :fi
return:return
在gdb命令行界面直接按下回车键,默认是将最近一条命令重新执 行一遍
next:n(next命令的调试术语叫“单步步过(step over)"),即遇到函数 调用时不进入函数体内部,而是直接跳过
step:s(单步步入(step into)”,顾名思义,就是遇到函数调用时进入函 数内部)
在实际调试时,我们在某个函数中调试一会儿后,不希望再一步步地执行到函数返回处,
而是希望直接执行完当前函数并回到上一层 调用处,这时可以使用finish命令。与finish命令类似的还有return 命令。
return命令用于结束执行当前函数,同时指定该函数的返回值
finish命令用于执行完整的函数体, 然后正常返回到上层调用中;return命令用于立即从函数的当前位置 结束并返回到上层调用中,
也就是说,如果使用了return命令,则在 当前函数还有剩余的代码未执行完毕时,也不会再执行了
jump :j (j 行号或者函数的地址,例如跳过了某个对 象的初始化代码,可能会导致程序崩溃 或其他意外操作,
如果 jump 跳转到的位置没有设置断 点,那么 gdb执行完跳转操作后会继续向下执行)
disassemble:dis(通过查看某段代码的汇编指令去排查 问题,
或者在调试一些不含调试信息的 release 版程序时,只能通过 反汇编代码定位问题
gdb的反汇编格式默认为AT&T格式,可以通过show disassembly-flavor查看当前的反汇编格式。
如果习惯阅读intel汇编格式,则可以 使用set disassembly-flavor intel命令来设置)
set args (set args "999 xx" "hu jj",如果想清除已经设置好的命令行参数,则使用set args不加任何 参数即可)
show args(可以通过show args 查看命令行参数是否设置成功)
watch:watch( 可以用来监视一个变量或者一段内存, 当这个变量或者该内存处的值发生变化时,gdb就会中断
int i ;char *p;char buff[128];
watch i;watch p;watch *p;
watch buff(监视一个数组或内存区间)
需要注意的是:当设置的观察点是一个局部变量时,局部变量失效后,观察点也会失效。
)
display:display(display 命令用于监视变量或者内存的值,每次 gdb 中断,都会 自动输出这些被监视变量或内存的值
display 变量名/内存地址/寄存器名
用info display查看当前已经监视了哪些值
使用 delete display清除全部被监视的变量
使用delete display 编号移 除对指定变量的监视
)
dir :dir(
gcc/g++编译出来的可执行程序并不包含完整的源码,
-g 只是加 了一个可执行程序与源码之间的位置映射关系,我们可以通过dir命令 重新定位这种关系
)
# redis-6.0.3b
wget http://download.redis.io/releases/redis-6.0.3.tar.gz
# apt-get -y install lsof
网友评论