当前位置: 首页 > news >正文

【Linux】GCCGDB

五、GCC & GDB

5.1 gcc

阶段变化命令
预处理hello.c->hello.igcc -E
编译hello.i->hello.sgcc -S
汇编hello.s->hello.ogcc -c
链接hello.o->a.outgcc
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,将看不到程序的函数名、变量名,所替代的是运行时的内存地址

gcc -g 1.c -o 1
g++ -g 1.cpp -o 1

5.3.2 启动dgb

gdb <执行文件>	# 启动gdb

5.3.3 设置运行参数

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

5.3.4 显示源代码

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代替)
break 10		# 设置断点在第10行
b 10
break main		# 设置断点在main函数
b main
5.3.5.2 多文件设置断点
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代替)
info b
info break
i break
i b
5.3.5.4 条件断点
b <filename>:<linenum> if <param> == 5
b 1.c:8 if a == 5
5.3.5.5 维护断点(删除断点delete(d), 使断点无效disable(dis), 是断点生效enable(ena))
  1. 删除断点

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

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

    enable			# 没有指定,全部断点生效
    enable [range]
    

5.3.6 调试代码

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

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

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

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

display 变量名
info display		# 查看display设置的自动显示的信息
undisplay num		# num(info display显示的编号),取消自动显示
disable display num	# 使得..失效
enable display num	# 恢复
  1. 查看变量的值的类型
ptype 变量
  1. 设置变量的值
set var 变量=100		# 将变量的var值设置为100
http://www.lryc.cn/news/332760.html

相关文章:

  • InternLM2-Chat-1.8B 模型测试
  • Flutter 关键字
  • Java常用API之Collections类解读
  • KV260 BOOT.BIN更新 ubuntu22.04 netplan修改IP
  • Android 代码自定义drawble文件实现View圆角背景
  • C#实现Word文档转Markdown格式(Doc、Docx、RTF、XML、WPS等)
  • 信息系统架构设计-以服务为中心的企业整合实践
  • mysql知识点梳理
  • 版本排序,(如果 版本 是 1,1a,1.1a, 2, 2c , 1c , 1.2a, 3 , 5b , 5)进行排序
  • Google视觉机器人超级汇总:从RT、RT-2到AutoRT、SARA-RT、RT-Trajectory
  • python笔记(9)Dictionary(字典)
  • 蓝桥杯嵌入式总结
  • 渗透测试:数据库UDF提权(linux)
  • java算法day45 | 动态规划part07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数
  • HuggingFace踩坑记录-连不上,根本连不上
  • 面试题:Spring Boot Starter的功能与使用场景
  • 上位机图像处理和嵌入式模块部署(qmacvisual之n点标定)
  • Francek Chen 的128天创作纪念日
  • PyTorch之Torch Script的简单使用
  • vscode 连接远程服务器 服务器无法上网 离线配置 .vscode-server
  • arm开发板移植工具mkfs.ext4
  • 某盾滑块拼图验证码增强版
  • 这个世界万物存在只有一种关系:博弈
  • c#让不同的工厂生产不同的“鸭肉”
  • 大数据分析与内存计算——Spark安装以及Hadoop操作——注意事项
  • 论文阅读RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection
  • 3D模型格式转换工具HOOPS Exchange如何将3D文件加载到PRC数据结构中?
  • c# wpf Template ContentTemplate
  • 空和null是两回事
  • UNIAPP(小程序)每十个文章中间一个广告