GCC 与 GDB 的学习
gcc 是 GUN Compiler Collection的缩写,可以支持多种语言编译,比如 C, C++, Java, pascal 等
gcc的编译过程
预处理(pre-processing)E:插入头文件,替换宏
编译(Compiling)S:编译成汇编
汇编(Assembling) c:编译成目标文件
链接 (Linking):链接到库中,变成可执行文件
1 |
|
也可以一次性完成:
gcc hello.c –o hello
但一般情况下生成.o文件比较好,可以重定位文件,让别人使用
gcc常用选项
选项名 | 作用 |
---|---|
-c | 编译或汇编源文件,但不链接,生成目标文件 |
-o | 指定输出文件 |
-E | 只运行C预编译器(头文件,宏等展开) |
-S | 生成汇编语言文件后停止编译(.s文件) |
-Wall | 打开编译告警(所有) |
-g | 嵌入调试信息,方便gdb调试 |
-llib | 链接 lib 库 (这里是小写 L ) 相当于 C++ #pragma comment(lib, “xxx.lib”) |
-Idir | 增加 include 目录 (这里是大写 i ) 头文件路径 |
-LDir | 增加 lib 目录 (编译静态库和动态库) |
gdb调试实例
下面以一个有错误的例子程序来介绍gdb的使用:
1 |
|
1 |
|
用gdb查看源代码可以用list命令,但是这个不够灵活。可以使用”layout src”命令,或者按Ctrl-X再按A,就会出现一个窗口可以查看源代码。也可以用使用-tui参数,这样进入gdb里面后就能直接打开代码查看窗口。其他代码窗口相关命令:
命令 | 作用 |
---|---|
info win | 显示窗口的大小 |
layout next | 切换到下一个布局模式 |
layout prev | 切换到上一个布局模式 |
layout src | 只显示源代码 |
layout asm | 只显示汇编代码 |
layout split | 显示源代码和汇编代码 |
layout regs | 增加寄存器内容显示 |
focus | focus cmd/src/asm/regs/next/prev |
refresh | 刷新所有窗口 |
tui reg next | 显示下一组寄存器 |
tui reg system | 显示系统寄存器 |
update | 更新源代码窗口和当前执行点 |
winheight name +/- line | 调整name窗口的高度 |
tabset nchar | 设置tab为nchar个字符 |
GCC 与 GDB 的学习
https://chaggle.github.io/2021/10/06/middleware/gcc/