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 @   仓隽  阅读(325)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示