C温故补缺(四):GDB
gdb
gdb是由GNU软件社区提供的C Debug工具
Pre
在调试前,需要先编译.c程序,且要加上-g使输出文件变得可调式
gcc test.c -g -o test
用gdb test来调试程序,用quit退出调试模式
几个指令
设置参数和显示参数,相当于main()的参数
set args 10 20
show args
查看源代码
list #显示所有
list n #从第n行显示
list fun #从指定函数显示
list 文件名:n #指定文件
list 文件名:fun
设置显示的行数
show listsize
set listsize n
断点
#设置断点
break 行号
break 函数
break 文件名:行号
break 文件名:函数
#查看断点
info break
#删除断点
del/delete
#失能/使能断点
disable 断点编号
enable 断点编号
#设置条件断点(一般用于循环)
break 10 if i==5
调试指令
start #程序开始调试,并停止在第一行
run #调试至断电
continue #继续运行至下一个断点
next #单步跳过
step #单步调试
finish #单步跳出
print #查看变量
ptype #查看变量类型
set var name=value #设置变量值
until #跳出循环
bt #查看函数调用栈
多进程调试
开关监控fork子进程
set detach-on-fork on
set detach-on-fork off
设置监控进程模式
set follow-fork-mode parent //默认情况
set follow-fork-mode child //跟踪子进程
info inferiors //查看调试的进程
inferior id //切换当前调试的进程
detach inferiors id //使进程脱离GDB调试
例子
查看函数栈帧反汇编代码
用disas 函数名
来查看函数栈帧的反汇编代码
如:
(gdb) disas main
Dump of assembler code for function main:
0x000000000040157c <+0>: push %rbp
0x000000000040157d <+1>: push %rbx
0x000000000040157e <+2>: sub $0x38,%rsp
0x0000000000401582 <+6>: lea 0x80(%rsp),%rbp
0x000000000040158a <+14>: callq 0x401660 <__main>
---Type <return> to continue, or q <return> to quit---
0x000000000040158f <+19>: callq 0x401550 <f>
0x0000000000401594 <+24>: mov %eax,%ebx
0x0000000000401596 <+26>: callq 0x401566 <n>
=> 0x000000000040159b <+31>: add %ebx,%eax
0x000000000040159d <+33>: mov %eax,-0x54(%rbp)
0x00000000004015a0 <+36>: mov $0x0,%eax
---Type <return> to continue, or q <return> to quit---
0x00000000004015a5 <+41>: add $0x38,%rsp
0x00000000004015a9 <+45>: pop %rbx
0x00000000004015aa <+46>: pop %rbp
0x00000000004015ab <+47>: retq
End of assembler dump.
补充:
-
查看寄存器用:info register rip/rsp...,或info registers所有寄存器
-
查看内存:examine,简写成x,x /<n/f/u>
-
n是查看内存个数,即该内存后多少字节,也可以是负数,表示前面
-
f是显示的格式
-
f:浮点数
-
i:地址
-
x/d/o/t:16,10,8,2进制显示
-
c/s:字符,字符串
-
-
u:显示的内存字节长度,用b/h/w/g表示1/2/4/8字节
-
本文来自博客园,作者:Tenerome,转载请注明原文链接:https://www.cnblogs.com/Tenerome/p/Creview4.html
分类:
C温故补缺
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南