Linux 系统上 C 程序的编译与调试

gcc 分步编译链接

  1. 预编译 : gcc -E main.c -o main.i
  2. 编译:gcc -S main.i -o main.s
  3. 汇编:gcc -c main.s -o main.o
  4. 链接:gcc main.o -o main

两步:

  1. gcc -c main.c -->main.o
  2. gcc -o main main.o -->main

一步:
gcc -o main main.c -->main

编译链接过程

在这里插入图片描述

makefile和make

管理工程实现自动化编译 (和 vs 比较)示例:
对 main.c add.c max.c 三个文件进行编译(注意: gcc 前面必须是 table 建缩进进)

在这里插入图片描述
make 命令根据 makefile 文件的规则生成可执行程序
在这里插入图片描述

gdb 调试

Debug 版本和 Release 版本

Debug 版本
Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人员,最常用的就是 debug 版本的可执行文件。

Debug 版本的生成:
因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生成包含调试信息的中间文件。
gcc -c hello.c -g —> 生成包含调试信息的中间文件
gcc -o hello hello.o

或者 gcc -o hello hello.c -g

Release 版本
Release 版本为发行版本,是提供给用户使用的版本。用 gcc 默认生成的就是 Release 版本。

首先将源代码编译、链接生成 Debug 版本的可执行文件,然后通过‘gdb Debug 版本的可执行文件名’进入调试模式。

单进程、单线程基础调试命令

  1. l //显示 main 函数所在的文件的源代码
  2. list 文件名:num //显示 filename 文件 num 行上下的源代码
  3. b 行号 //给指定行添加断点
  4. b 函数名 //给指点函数的第一有效行添加一个断点
  5. info break //显示断点信息
  6. delete 断点号 //删除指定断点
  7. disable 断点号 //将断点设定为无效的,不加断点号,将所有断点设置为无效
  8. enable 断点号 //将断点设定为有效的,不加断点号,将所有断点设置为有效
  9. r(run) //运行程序
  10. n(next) //单步执行
  11. c (continue) //继续执行,直接执行到下一个断点处
  12. s //进入将要被调用的函数中执行
  13. finish //跳出函数
  14. q //退出调试
  15. p val //打印变量 val 的值
  16. p &val //打印变量 val 的地址
  17. p a+b //打印表达式的值
  18. p arr(数组名) //打印数组所有元素的值
  19. p *parr@len //用指向数组的指针打印数组所有元素的值
  20. display //自动显示,参数和 p 命令一样
  21. info display //显示自动显示信息
  22. undisplay + 编号 //删除指定的自动显示
  23. ptype val //显示变量类型
  24. bt //显示函数调用栈
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值