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 运行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库