6-LINUX-- C 程序的编译与调试

一.环境搭建

1.gcc的安装

    1>.切换到管理员模式    sudo su   ---->    输入密码

    2>.apt install gcc   //C语言的编译环境

    3>.apt install g++  //c++编译环境的搭建

    4>.install update   //软件升级

2.gcc分步编译链接

(1)预编译

gcc -E main.c -o main.i

 (2)编译

gcc -S main.i   -o main.s

 (3)汇编

gcc -c main.s -omain.o

(4)链接

gcc main.o -o main

(5)运行

./main

3.编译链接过程

3.1 预编译阶段
a) 删除所有的“#define”,并且展开所有的宏定义;
b) 处理所有的条件预编译指令,“#if”、“#ifdef”、“#endif”等;
c) 处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置;
d) 删除所有的注释;
e) 添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错
误和警告时显示行号;
f) 保留所有的#pragma 编译器指令,因为编译器需要使用它们。
3.2 编译阶段
词法分析、语法分析、语义分析,代码优化,汇总符号。
3.3 汇编阶段
将汇编指令翻译成二进制格式,生成各个 section,生成符号表。
3.4 链接阶段
a) 合并各个 section,调整 section 的起始位移和段大小,合并符号表,进行符号解析,
给符号分配虚拟地址
b) 符号重定位
4、makefile 和 make
管理工程 实现自动化编译 (和 vs 比较)示例:
对 main.c add.c max.c 三个文件进行编译(注意: gcc 前面必须是 table 建缩进)
make 命令根据 makefile 文件的规则生成可执行程序

二.gdb调试

1.基础调试命令

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>.  inish //跳出函数
14>. q //退出调试

相关推荐

  1. vscode编译调试wsl环境c语言程序

    2024-03-15 00:48:02       9 阅读
  2. C#日志记录:实现应用程序监控调试

    2024-03-15 00:48:02       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 00:48:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 00:48:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 00:48:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 00:48:02       20 阅读

热门阅读

  1. 零基础入门多媒体音频(1)-音频基础

    2024-03-15 00:48:02       20 阅读
  2. go的slice学习

    2024-03-15 00:48:02       21 阅读
  3. 分布式锁解决方案

    2024-03-15 00:48:02       21 阅读
  4. Easy Conan + CMake template for C++ projects

    2024-03-15 00:48:02       19 阅读
  5. MFC 实现延时,并且进行消息分发,不阻塞

    2024-03-15 00:48:02       21 阅读
  6. 【C++】vector的底层剖析以及模拟实现

    2024-03-15 00:48:02       21 阅读
  7. 利用装饰器模式使用第三方库

    2024-03-15 00:48:02       20 阅读
  8. Vue template到render过程,以及render的调用时机

    2024-03-15 00:48:02       27 阅读
  9. 每日shell脚本之定期检查服务器状态

    2024-03-15 00:48:02       24 阅读