GDB常用命令

来源:互联网 发布:美食文案 知乎 编辑:程序博客网 时间:2024/06/06 00:27

GDB默认跟随父进程,可通过如下跟随子进程

set follow-fork-mode child/parent


set detach-on-fork [on|off]

on: 断开调试follow-fork-mode指定的进程,默认。
off: gdb将控制父进程和子进程。follow-fork-mode指定的进程将被调试,另一个进程置于暂停(suspended)状态。可通过inferior恢复暂停,先设断点。


查看当前所有的进程
info inferiors 


切换进程
inferior (info inferiors返回的值)


info stack

frame

可查看当前调试到哪一行


core dump查看

ulimit -c unlimited
gdb 可执行文件 core文件


调用函数

call fun()


GDB TUI相关
进入wh
wh


改变方向箭作用窗口
focus src
focus cmd


退出
ctr+x+a




gdb program
gdb program core
gdb program pid


退出gdb,ctrl+d


shell command 

shell
exit


列出以args为前缀的命令
complete args
列出与word相关的命令详细说明
apropos word


info: 用来获取和被调试应用程序相关的信息
show: 用来获取GDB本身设置相关一些信息


只停止一次的断点,停止后删除断点
tbreak
条件断点
break ... if cond


break function
break +offset 向前
break -offset 向后
break linenum
break *address


清除断点
clear
clear function
clear linenum


enable once [range...]
enable delete [range...]
disable [range...]
ignore 断点 次数

条件断点
condition bnum expression
取消第bnum条件
condition bnum


断点停止后,执行命令
break fun 
commands
要执行的命令
end

commands 断点索引

要执行的命令
end

watchpoint
watch expr  写时,停止
rwatch expr  读时,停止
awatch expr  读写时,停止


catchpoint 发生事件停止
catch throw




attach pid 调用正在运行的程序
detach pid 停止调试


kill  杀掉当前调试进程


多线程
info threads
thread threadno 切换线程

设置是否锁定其它线程
set scheduler-locking on/off/step

中止当前函数调用
return [expression]


当前GDB的信号处理
info signals


handle signal action
signal: SIGALRM
action: stop nostop print noprint pass nopass ignore noignore


栈相关
up n   :当前为0,向上第N帧
down n :向下第N帧
frame n: 跳到第n帧


查看当前帧局部变量
info locals
查看当前帧的参数
info args


含有域时,强制类型转换需要加''
p *('Test::A' *)pObj2

设置传给应用的参数, 避免每次重复输入
set args 

获取传给应用的参数

show args


p为print简写

若想调用printf ,不能单独写p

printf  "pid(%d)", 1


continue 忽略次数


查看内存
x/nfu addr
n: 数目
f: 打印格式 s(C风格字符串,即每行以\0结尾) x(十六进制) i(机器指令) 其它printf支持的格式
u: 打印单元的大小。b(byte) h(halfword 2 bytes) w(word 4 bytes) g(giantwords 8 bytes)


每次执行调试,自动打印

display 变量

undisplay 索引


set print elements 数目  显示元素的数目,默认为200,设为0,表示不限制

set print null-stop   打印字符数组时,遇到NULL停止

set print [filed] on/off 打开/关闭相应的属性


无需要输入shell,可直接用的命令
make
cd
pwd


设环境变量
set environment USER=zyq


设运行路径
path <dir>


重定义输入与输出
tty /dev/pts/存在的伪终端号
r > outfile


调试正在运行的程序
gdb <program> PID
gdb <program> 关联上源代码
attach PID


查看调试程序是否运行,进程号,被暂停的原因
info program(非程序名,就是当前英文)


清除当前行的断点
clear


对指定的线程设断点
b line thread 线程号


设置显示的行数
set listsize 行数


查找源代码
search 正则表达式
forward-search 正则表达式
reverse-search 正则表达式
按回车查找下一个


查看前面代码
list -


设置查找源代码的路径,以":"分隔
dir 绝对路径


加单引号
p 'f.c'::x




显示格式
按字符格式显示
p/c i
按二进制格式显示
p/t i


设置显示结构体时,是否显示其内的联合体数据
set print union on


设置变量,无类型
set $val=value


显示当前变量
show convenience


改变程序变量的值
p 变量=值


改变程序运行顺序
jump line
跳转后如果没设断点,相当于跳转后,continue


给调试的程序产生信号,与通过shell产生的信号不同
signal <signal名或值>

自定义命令
define commandname
....
end
命令行参数,最多10个,$arg0 $arg1 $arg2


命令里可用的语句
if cond-expr
...
else
...
end


while cond-expr
...
else
...
end


定义命令文档信息
document commandname
...
end


查看自定义命令的如何定义
show user commandname


查看自定义的所有命令
help user-defined

0 0