gcc和gdb的基本操作
程序员文章站
2024-01-12 08:31:46
gcc和gdb yum 在线安装软件,使用阿里云镜像站,OPSX 选择你安装的系统 点帮助 查看配置命令行 yum list | grep gdb 查找要安装的软件 yum install y gdb 不需要确认安装软件 gcc 1. 预处理 .i文件 E 预处理 o 指定输出文件名 例 : gcc ......
gcc和gdb
yum
- 在线安装软件,使用阿里云镜像站,opsx
- 选择你安装的系统 点帮助 查看配置命令行
- yum --list | grep gdb #查找要安装的软件
- yum install -y gdb #不需要确认安装软件
gcc
1. 预处理 .i文件
- -e 预处理
- -o 指定输出文件名
例 : gcc -e hello.c -o hello.i - 作用 :
- 干掉注释
- 宏替换
- pragma 不替换
- 加入很多行号信息,用于报错和警告使用
2. 编译 .s 文件
- -s 编译
- 例 : gcc -s hello.i 自动生成hello.s文件
- 作用 :
- 词法分析
- 语法分析
- 语义分析
- 优化
3. 汇编 .o文件
- -c 汇编
- 例 : gcc -c hello.s 自动生成hello.o文件
- elf格式文件
- readelf -h 查看elf头文件
- nm 从目标文件中解析出文件符号信息
- objdump -ds 反汇编
- strip 删除文件符号信息 相当于给文件瘦身
4. 链接
- 例 : gcc hello.o 生成a.out文件 不需要加任何选项
- 作用:将外部代码加入到我们的程序中,加上启动代码。
优化级别 :
o0 缺省 o1 o2 o3 -wall 显示所有的警告信息 -w 屏蔽所有警告信息
gdb
- 编译时加上 -g 选项 加入调试信息 gdb a.out
l (list) : 显示源码10行 l 行号 :从指定行显示10行 直接回车 : 执行上次输入的指令 l 函数名 : 显示函数体 b (breakpoint) 行号 : 在程序的指定行设置断点 b 行号 if 变量 == n : 按条件设置断点 当变量为n时中断 i b (info breakpoint) : 查看设置的断点 注意:设置断点不要设置在空行和函数名上,不然容易设置不上 r (run) : 运行程序 n (next) : 下一步,遇到函数不进入 s (step) : 下一步,遇到函数进入函数内部 finish : 结束当前函数,返回到函数调用的地方 print 变量 : 打印变量的值 whatis 变量/函数 : 查看变量/函数的类型 d (delet) 断点编号 :删除第几个断点
调试段错误
- 编译时加上-g选项
- ulimit -a 查看系统资源限制
ulimit -c unlimited 更改core file size 为 unlimited 用来保存段错误 - 运行a.out产生core文件
- gdb a.out core
推荐阅读
-
gcc和gdb的基本操作
-
基本数据类型和包装类的区别 Boolean Character Byte Short Integer Long Float Double 、栈、堆
-
mysql-msql的索引和表查询的操作
-
Emacs 编辑环境,第 2 部分: 学习 Emacs 的基本模式和编辑特性
-
MySQL数据库的基本使用和管理
-
MYSQL入门学习之十一:触发器的基本操作_MySQL
-
解析PHP的Yii框架中cookie和session功能的相关操作,yiicookie
-
Java包装类和对应基本数据类型的自动拆箱和自动装箱
-
使用Flask来实现mysql的基本操作
-
ThinkPHP基本的增删查改操作实例教程,thinkphp实例教程_PHP教程