C语言编译与调试
Linux上C语言编译
1. 编译的过程
(1)预编译
(2)编译
词法分析、语法分析、语义分析、代码优化、汇总符号
(3)汇编
将汇编指令翻译成二进制格式,生成各个section,生成符号表
(3)链接
2. 一步编译执行命令
2.1 编译命令
缺点:如果依赖文件过多,则会太麻烦
gcc -o 执行文件名 依赖的所有.c文件
ex: gcc -o main main.c
2.2 执行命令
路径/可执行程序名 ps:路径可为相对路径也可以是绝对路径
2.3makefile实现自动化编译
文件名称必须是:makefile -> touch 普通文件
2.3.1 安装make命令
sudo apt install make
2.3.2 编辑makefile文件
文件格式:
all:可执行文件名(可执行程序)
可执行文件名:所有依赖文件的.o文件
生成.o文件的命令(gcc -o)
依赖文件.o:依赖文件.c
生成.c文件的命令(gcc -c)
依赖文件.o:依赖文件.c
生成.c文件的命令(gcc -c)
…
clean:
删除所有的.o文件(rm -rf)
3. 调试
debug 调试版本
release 发布版本
一步编译完成默认为发布版本
3.1 转变为debug模式
命令:gcc -o 执行文件名 依赖的所有.c文件 -g
3.2 启动调试
命令:gdb 执行文件名
有(gdb)提示符出现,可以输入命令
3.3 下断点
3.3.1 展示十行内容
命令 l
3.3.2展示当前行号前后十行的内容
命令 l 行号
3.3.3 下断点
命令 b 行号
3.3.4 查看断点信息
命令 info b
3.3.5 运行代码(运行代码到断点位置阻塞{或scanf,fgets…})
命令 r
3.3.6 下一步 一条语句逻辑运行(跳过函数)
命令 n
3.3.7 实时查看当前变量的信息
命令 p 变量
3.3.8 结束调试
命令 quit
3.3.9 下一步 进入将要被调用的函数中执行
命令 s
3.3.10 下一步 跳出函数
命令 finish
3.3.11 删除断点
命令 delet 断点编号
3.3.12 无效断点
命令 diable 断点编号
3.3.13 有效断点
命令 inable 断点编号
3.3.14 显示变量类型
命令 ptype 变量
3.3.15 跟踪进程命令
命令 set follow-fork-mode child
跟踪子进程
命令 set follow-fork-mode parent
跟踪父进程