【Linux】GCC&GDB

五、GCC & GDB

5.1 gcc

阶段 变化 命令
预处理 hello.c->hello.i gcc -E
编译 hello.i->hello.s gcc -S
汇编 hello.s->hello.o gcc -c
链接 hello.o->a.out gcc
bash 复制代码
gcc -E hello.c -o 1.i	# -o指定输出文件
gcc -E hello.c -g 		# -g包含提示信息
gcc -D
gcc -DDebug <FILE>
gcc -DSize 12 <FILE>

5.2 gdb

5.3.1 生成调试信息

没有-g,将看不到程序的函数名、变量名,所替代的是运行时的内存地址

bash 复制代码
gcc -g 1.c -o 1
g++ -g 1.cpp -o 1

5.3.2 启动dgb

bash 复制代码
gdb <执行文件>	# 启动gdb

5.3.3 设置运行参数

bash 复制代码
set args <arg1> <arg2> ... <argn>	# 指定运行时的参数, argv[]
show args							# 查看设置好的运行参数

5.3.4 显示源代码

bash 复制代码
list					# 默认打印10行(一般是打印当前行的前五行和后五行)
list <LINENUM>			# 指定打印的行数
list <FUNCTION_NAME>	# 显示函数名为FUNCTION_NAME的源程序
list -					# 显示当前行前面的代码

set listsize <COUNT>	# 设置一次显示源代码的行数
show listsize			# 查看当前的listsize

5.3.5 断点

5.3.5.1 简单断点break(可用b代替)
bash 复制代码
break 10		# 设置断点在第10行
b 10
break main		# 设置断点在main函数
b main
5.3.5.2 多文件设置断点
bash 复制代码
break filename:linenum				# 在filename中的linenum行打断点
break filename:function				# 在filename中的function处打断点
break class::function				# 在class中的function处打断点
break namespace::class::function	# 在名称空间为namespace中的class类中的function处打断点
5.3.5.3 查询断电info(可用i代替)
bash 复制代码
info b
info break
i break
i b
5.3.5.4 条件断点
bash 复制代码
b <filename>:<linenum> if <param> == 5
b 1.c:8 if a == 5
5.3.5.5 维护断点(删除断点delete(d), 使断点无效disable(dis), 是断点生效enable(ena))
  1. 删除断点

    bash 复制代码
    delete [range..]
    delete 断点号1					# 删除断点号为1的断点
    delete 断点号1 - 断点号4		  # 删除断点号1-4的断点
  2. 使断点无效

    bash 复制代码
    disable			# 没有指定,全部断点失效
    disable [range]	# 和删除断电一个用法
  3. 使断点生效

    bash 复制代码
    enable			# 没有指定,全部断点生效
    enable [range]

5.3.6 调试代码

指令 含义 简写
run 运行程序 r
next 单步跟踪,不会进入函数体内 n
step 单步跟踪,会进入函数体内 s
finish 退出进入的函数
until 在一个循环体内单步跟踪时,可以运行程序知道退出循环体 u
conintue 继续运行程序到下一个断点处 c
quit 退出gdb q

5.3.7 数据查看(print(p))和自动显示(display)

  1. 数据查看
bash 复制代码
print 变量/表达式/字符串
  1. 自动显示(display)

在程序运行过程中,每次停住的时候,这些变量都会自动显示

bash 复制代码
display 变量名
info display		# 查看display设置的自动显示的信息
undisplay num		# num(info display显示的编号),取消自动显示
disable display num	# 使得..失效
enable display num	# 恢复
  1. 查看变量的值的类型
bash 复制代码
ptype 变量
  1. 设置变量的值
bash 复制代码
set var 变量=100		# 将变量的var值设置为100
相关推荐
chao_7892 分钟前
更灵活方便的初始化、清除方法——fixture【pytest】
服务器·自动化测试·python·pytest
枷锁—sha23 分钟前
【DVWA系列】——CSRF——Medium详细教程
android·服务器·前端·web安全·网络安全·csrf
枷锁—sha25 分钟前
跨站请求伪造漏洞(CSRF)详解
运维·服务器·前端·web安全·网络安全·csrf
scuter_yu25 分钟前
腾讯云云服务器深度介绍
服务器·云计算·腾讯云
云途行者34 分钟前
使用 docker 安装 openldap
运维·docker·容器
群联云防护小杜41 分钟前
深度隐匿源IP:高防+群联AI云防护防绕过实战
运维·服务器·前端·网络·人工智能·网络协议·tcp/ip
YuTaoShao1 小时前
【LeetCode 热题 100】994. 腐烂的橘子——BFS
java·linux·算法·leetcode·宽度优先
退役小学生呀1 小时前
十五、K8s可观测能力:日志收集
linux·云原生·容器·kubernetes·k8s
van叶~1 小时前
Linux探秘坊-------15.线程概念与控制
linux·运维·服务器
Andy杨3 小时前
20250718-1-Kubernetes 应用程序生命周期管理-应用部署、升级、弹性_笔记
linux·docker·容器