gdb常用命令总结(汇编和c)

参考
gdb的安装:参考

简单命令

gdb test 运行程序target
gdb test --args test 1 2 3运行程序test ,且参数列表(args)为[test,1,2,3]
show args 显示args
set args 修改args

上下键可以查看命令历史(tui中,如果选中的不是cmd窗口,快捷键功能会被替换成别的)
如果忘记了用法,可以help command,可以看某个command的用法,比如help p

b 断点
info b 查看断点
del或者clear 删除断点
ingore (ignore N COUNT)忽略断点N,次数为COUNT,即前COUNT次断点不触发

start 运行(自动在main函数处停下)
r 运行(如果没断点就不停)
c 继续运行
j(jump) (参考)跳到某个位置(它不是快进到某个位置,它是直接跳转到那个位置,它不会运行中间的指令),我不常用,不是特别清楚,需要了解可以参考这个示例(Linux GDB jump 命令介绍)。

n 下一行代码
s 进入函数
ni 下一条指令
si 进入函数(汇编级)

n 10 运行10行代码
ni 10 运行10条指令

until 退出循环
finish 退出函数(相当于是快进)
return 退出函数(它是强制退出,跳过了中间的指令)
call 调用函数

l 显示代码
bt 查看堆栈

p 打印变量
x 参数为内存地址,打印内存(help x查看用法)
info reg all 打印所有寄存器
info reg rsp 打印rsp寄存器(简写i r rsp
p r s p 打 印 r s p 寄 存 器 ( 注 意 , 这 里 需 要 加 ‘ rsp 打印rsp寄存器(注意,这里需要加` rsprsp`符号,而上面命令那个不需要)
p $xmm0.v2_double 打印xmm0寄存器(认为它存的是两个double)

tui相关命令(参考
layout src 显示源码
layout asm 显示汇编
layout reg 显示寄存器
layout split 显示多个窗口
tui reg general 显示通用寄存器
tui reg all 显示所有寄存器
tui enable 打开tui
tui disable 关闭tui
ctrl+x, a 关闭tui
ctrl+L 刷新窗口
update 更新tui
focus cmd 选中命令窗口

info threads 查看线程信息
info frame 查看帧信息
frame N 切换帧

edit location 修改代码(默认编译器是ex,没用过,不过可以改成vim)
info float 查看浮点器硬件
info vector 查看向量寄存器状态

中级功能

  • 条件断点(参考),比如 b foo if a==1 ,条件成立是触发断点
  • 监控断点(参考),当我们监控的变量/寄存器/内存发生变化时,触发断点。比如watch var_iwatch *(int*)0x7fff123456watch $rsp
  • 临时断点(断点只生效一次),命令为tbreak,简写为tb
  • 自动打印变量(每次程序暂停,都自动打印,个人感觉打印太多时看着有点闹心)命令为display
  • 临时变量
  • 修改变量或者寄存器或者内存的值(参考)
  • 执行shell命令(在命令前输入shell即可,比如shell clear就相当于是执行了shell中的clear命令,清屏)
  • 管道命令(在命令前输入pipe即可,比如pipe disassemble main | tee main.s就相当于把main函数的汇编代码通过管道重定向到了main.s文件中,在tui中管道命令好像会失效)

高级功能

  • 远程调试(remote debug)
  • 调试正在运行的程序(attach)
  • gdb往回跳转(会有一些副作用,参考资料),也可以使用checkpoint
  • gdb脚本(还是好用的)
  • gdb+python脚本(感觉比较强大,但是不太会用,参考
  • 快照功能(core文件,参考
  • 在内存中搜索(参考)
  • 内存区域( 不常用 参考

猜你喜欢

转载自blog.csdn.net/qq_29809823/article/details/118941735