2020年12月19日——Linux环境下的C语言编译与调试

第一部分:编译

一、Vim编辑

  1. vim 下打开新文件: 命令 sp filename
  2. vim 下切换文件:组合键 ctrl + w + down
  3. vim下复制多行:组合键 number + yy
  4. vim 下粘贴:组合键 p

二、Gcc编译

1.手动编译
// -o 表示目标文件
gcc -c fn1.c fn2.c fn3.c main.c -o main.out
// 将写好的函数提前编译,将提高最后编译的效率
gcc -c fn1.o fn2.o fn.o main.c -o main.out
2.Makefile

在工作目录下新建一个名为Makefileormakefile的文件

# this is makefile
  2 hello.out:max.o min.o compare.c
  3         gcc max.o min.o compare.c
  4 max.o:max.c
  5         gcc -c max.c
  6 min.o:min.c
  7         gcc -c min.c

保存后就可以用命令make一键编译了!

第二部分:GDB调试

调试时建议保存源代码

// 需要调试的代码必须用-g再次编译
gcc -g main.c -o main.out
  • 进入调试:gdb main.out
  • 显示代码:list 或者 l
  • 单步调试:start
  • 打印变量:p 变量名 | p * 指针名(or内存地址)
  • 打印地址:p &变量名
  • 进入函数:s
  • 执行下行:n
  • 查看堆栈:bt
  • 切换函数:f 编号
  • 批量打印:x/n(要打印的变量数)d(十进制显示)b(步长为字节) 0xf…f(起始地址)

第三部分:Tips

一、返回值
  1. 主函数返回值:
  • return 0 表示执行正常
  • return 1 表示执行异常
  1. 终端下输入 echo $? 打印上次程序的返回值
二、命令行参数
int main(int argv, char*[] argc)
  1. argv 保存命令个数
  2. agrc 保存各个命令
三、三种流
  1. printf 和 scanf 的原理
// 向标准输出流输入
fprintf(stdout, "please input value a : \n");
// 向标准错误流输入
fprintf(stderr, "the value must > 0");
// 向标准输入流输入
fscanf(stdin, "%d", &a);
  1. 输出重定向
test.out 1>stdout.text 2>stderr.text < stdin.text
四、内存管理

内存分配

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值