C++(3)--编译、gdb调试

3--编译和执行过程

GCC是一个编译套件,是一个以"gcc"命令为首的源码施工队。施工队的成员有gcc、cpp、as、ld四个成员

  1. 预处理–宏定义展开,头文件引入-- cpp 等价于 gcc -E
  2. 编译–C语言->汇编语言–gcc -S
  3. 汇编–汇编语言->机器语言–gcc -c
  4. 链接–链接相关的.o文件–ld

-o 指定输出文件的名字

1.编译

(win操纵系统,老九课堂笔记)
1.预处理–将头文件(.h)的具体内容展开至源文件中;删除注释;添加行号和文件标识等;预处理完产生一个.ii文件(c语言编译将产生一个.i文件)

cpp demo.cpp > demo.ii

cpp 为 C Preprocessor的缩写, >表示输出到文件
还有另外两种命令也可以用于产生.ii 文件,其中-o参数用于指定输出文件命

g++ -o demo.ii -E demo.cpp
g++ -o demo.ii demo.cpp

2.编译–对.ii文件进行词法/语法/语义分析,生成相应的汇编文件,.s文件

g++ -o demo.s -S demo.ii

3.汇编–将汇编文件转换成二进制目标文件.o .obj结尾

as -o demo.o demo.s

g++同样可以实现

g++ -o demo.o demo.s

4.连接–将目标文件和C++库函数连接,将涉及到的库代码合并到目标代码中;

g++ -o demo.exe demo.o

生成demo.exe可执行文件

(mac+vscode)
在vscode 终端上输入

g++ main.cpp -o main
"/Users/chenyingying/CppProject/Helloworld/"main

即可运行,(猜测)第一条语句是不是包括了预处理,编译,汇编,连接于一体,生成mac/linux下可执行文件main.out文件。输入目录运行对应的可执行文件。

2.gdb调试

GNU debugger–Richard Stallman设计的
要想通过gdb调试,必须在编译时加上调试接口,即-g

gcc -g ./rubbish.c input.c readfile.c -o rubbish19_debug
gdb ./rubbish19_debug

GDB 的一些常用指令:

  1. run/r–进入调试状态后,运行代码
  2. break/b–设置断点break 12 # 在源码12行设置断点
  3. list/l–显示源代码
  4. continue/c–继续执行直至下一个端点或者结束
  5. print/p–打印变量的值
  6. examine/x–查看指定内存地址中的数据,(只能查看当前被调试程序能够非法访问的地址)
  7. next/n–单步执行命令。

MAC上使用gdb(完美解决)

(证书没有添加成功,sudo应该可以跑)

gdb 查core

sudo service apport stop    # 关掉某些服务

ulimit -c unlimited         # 启动某些东西

xxxbuild_run app1_test     # 编译运行某个文件,产生core文件 v

cat /proc/sys/kernel/core_pattern   # 查看core文件生成的路径

cd xxx/test                # cd core 文件目录

gdb app1_test core   	  # gdb 调试出core文件

bt                        # 跳转到出core的地方

版权声明:本文为sinat_40624829原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。