快乐Linux —— 2. gcc & g++ & gdb 常规操作
0. 简述
讲讲基础的gcc操作,和程序生成简单过程,和gdb的基础操作。
1. gcc 与 g++ 区别
两者都可以编译C文件和C++文件,但g++会默认链接C++的库,而gcc要编译C++的话要显示链接stdc++库。
gcc -o _Main hello.cpp -lstdc++
g++ -o _Main hello.cpp
2. gcc 基本操作
-
预编译(.c/.cpp -> .i)
处理预编译指令,展开头文件,宏替换,删除注释
gcc -E 源.c -o 源.i -
编译 (.i -> .s)
词法,语法解析,代码优化,汇总符号,生成汇编指令
gcc -S 源.i -
汇编 (.s -> .o)
将汇编指令翻译成二进制,生成各个段,生成符号表
gcc -c 源.s -
链接 (.o -> 可执行文件)
合并所有段,调整各个段大小,进行符号解析,给符号分配虚拟地址,进行符号重定位
gcc -o 可执行文件 源.o
3. Debug 与 Release
Debug 版本称为调试版本,在编译时会加入一些调试信息
Release 发行版本
//gcc -o 默认生成的是release版本
gcc -o release 源.c
gcc -o debug 源.c -g
4. 常见gdb命令
-
显示源代码
l显示主函数所在文件的源码list filename:line显示指定文件的源码 -
断点管理
b linenum给默认最近显示的文件指定行添加断点b filename:linenum给指定文件指定行添加断点b funcname给函数的第一行添加断点info b显示所有断点信息d bpnum删除指定断点编号 -
单步执行的流程控制
r启动调试s/n逐语句 / 逐过程u/finish退出循环 / 退出函数c执行到下一次断点q退出gdb -
查看变量的值
p _var/display _var显示对象值,每一步都显示ptyoe _var显示变量类型bt显示函数调用过程

浙公网安备 33010602011771号