【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
相关推荐
K·Herbert1 小时前
最新CentOS 7 yum源失效的解决方案(2025年6月)
linux·运维·centos
别骂我h1 小时前
部署KVM虚拟化平台
linux·运维·服务器
繢鴻1 小时前
紧急救援!Ubuntu崩溃修复大赛
linux·服务器·ubuntu
showmethetime2 小时前
优化nginx参数(基本通用参数)
运维·nginx
老六ip加速器2 小时前
获取ip地址安全吗?如何获取静态ip地址隔离ip
运维·网络·智能路由器
净心净意10 小时前
浅谈DaemonSet
运维·jenkins
Apex Predator17 小时前
jenkins流水线打包vue无权限
运维·jenkins
hujun861020 小时前
Ubuntu安装无线网卡
linux
Johny_Zhao20 小时前
CentOS Stream 8 高可用 Kuboard 部署方案
linux·网络·python·网络安全·docker·信息安全·kubernetes·云计算·shell·yum源·系统运维·kuboard
卖猪肉的痴汉1 天前
1.1 Linux 编译FFmpeg 4.4.1
linux·ffmpeg