快乐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
显示函数调用过程