Linux 系统上 C 程序的编译与调试(make、gdb)


Linux系统上 C 程序的编译与调试需要用到gcc,这里就不详细介绍gcc的安装,程序编译链接过程在下面的链接中。

详情请点击↓

程序编译链接过程

提示:以下是本篇文章正文内容,下面案例可供参考

一、Linux 系统上 C 程序的编译

C程序的编译需要四部:预编译、编译、汇编、链接

其分布命令如下:

$ gcc -E main.c -o main.i //预编译
$ gcc -S main.i -o main.s //编译
$ gcc -c main.s -o main.o //汇编
$ gcc -o main main.o      //链接

也可以一步完成:

$ gcc -o main main.c

二、make && makefile文件

make 管理工程实现自动化编译 (和 vs 比较)示例:
对 main.c add.c max.c 三个文件进行编译

文件展示:
add.h:

 int add( int x, int y);

add.c:

 int add( int x, int y)
 {
     return x + y;
 }

max.h:

 int max( int x, int y);

max.c:

 int max( int x, int y)
 {
     return x > y ? x : y;
 }

main.c:

#include<stdio.h>
#include"add.h"
#include"max.h"

int main()
{
     int x = 2;
     int y = 5;
     printf("x = %d,y = %d\n",x,y);
    printf("add = %d\n",add(x,y));
    printf("max = %d\n",max(x,y));
    return 0;
}

makefile文件:

all : main
 
main : main.o add.o max.o
     gcc -o main main.o add.o max.o
 
main.o : main.c
    gcc -c main.c
 
add.o : add.c
    gcc -c add.c

max.o : max.c
    gcc -c max.c

clean :
    rm -rf *.o main

make的使用:

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

三、gdb调试

3.1 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 版本的可执行文件名’进入调试模式。

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__小柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值