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 运行

 


posted @ 2021-11-02 11:12  仓俊  阅读(395)  评论(0)    收藏  举报