GDB调试
gdb
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。
gdb调试命令
break/b *0x地址:下断点,*表示为指针。
delete/d:删除断点,指明断点编号或删除所有。
info b:查看断点个数
x /nfx 0x内存地址:n表示要显示的内存单元的个数,f表示显示方式(可取x,按十六进制格式显示变量)。
set: 修改值 set {int}0x待修改地址 = 值:{int}为修改值的类型,也是修改的内存空间大小;修改寄存器,如set $rip=0x401233;修改变量,set var b=xx
disassemble/disas 函数名/起始地址[,结束地址]:反汇编一部分代码
next/n: 单步步过
step/s: 单步步入
finsih/f:运行完当前函数,返回到函数调用点
run/r :运行(如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处)。
continue/c:继续运行
quit/q:结束
调试子进程
gdb调试多进程时默认追踪父进程。切换到默认开始调试子进程的命令:set follow-fork-mode child。这个命令是要在调试前使用。
同时调试父子进程
要同时调试父进程和子进程,可以使用“set detach-on-fork off”(默认detach-on-fork是on)命令,这样gdb就能同时调试父子进程,并且在调试一个进程时,另外一个进程处于挂起状态。默认情况,是会将子进程分离出去,父进程会变为init,该子进程独立运行,不受gdb控制。
让父子进程都同时运行,可以使用“set schedule-multiple on”(默认schedule-multiple是off)命令。
gdb每个调试的进程都会以inferior来记录,所以我们可以通过“info inferiors”来查看当前调试器调试的进程有哪些,还可以在调试过程中通过“inferior inferior号”来切换。
调试已经运行的程序
方法一:gdb program pid
方法二:先启动gdb,后attach pid
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类