GDB动态调试工具
binutils是静态调试工具,而同属于GNU的gdb则是一款动态的调试工具。
GDB的启动方式
gdb->file exefile->set args->start->continue
gdb exefile
gdb exefile corefile
gdb exefile pid
断点
软件断点:由非法指令异常实现
break func_name [if var = value] break file : line [if var = value] tbreak #单次断点
info breakpoints #断点查看
delete 1 2 n #删除1 2
delete breakpoints
enable 1 2 n
disable 1 2 n
#-----------------------------
#调试时的常用操作
print name #变量查看
set var var_name=value #变量设置
next [n] #执行下一行代码
step #执行并进入函数
return [value] #强制当前函数返回【value】
finish #运行至当前函数返回
until line
jump line
硬件断点:
由硬件特性实现 (限量)当代码位于只读存储器(Flash)时, 只能通过硬件断点调试
使用方式与软件断点一致
数据断点:
watch命令用于监视变量值是否被改变(本质为硬件断点)
watch var_name #
print /a var_name #打印var_name的地址
x /Nuf 0x0804a032 #查看内存中该地址的数据 N:单元个数 u:每个单元的大小(b1h2w4g8字节) f:格式(xduotacf)
回溯检查程序异常结束原因(Coredump)
backtrace #查看函数调用栈信息 frame N #切换到栈编号为N的上下文中 info frame #查看当前函数调用的栈帧信息
# 参数 info args
# 返回地址
#ebp--->
# old ebp
# 寄存器信息 info registers
# 局部变量 info locals
# 其他数据信息
#esp--->
#其他info指令相关
info varibles #查看程序中的变量符号
info functions #查看程序中的函数符号
其他调试技巧
display /f expression #断点处自动打印 expression可为变量或其他表达式
undisplay
whatis | ptype #查看程序中的符号 ptype更详细
#多线程
info threads
thread n #切换到n号线程
thread apply 1 n #1号线程继续运行
thread apply by all #运行所有线程
set scheduler-locking on #只运行当前线程 off所有线程并发执行 n 运行

浙公网安备 33010602011771号