1编译器,调试器安装
1.1.1安装GCC,GDB
1 2 3 4 5 6
| //使用apt包管理命令 sudo apt update sudo apt install build-essential gdb //使用yum包管理命令 sudo yum update sudo yum install gdb
|
1.1.2安装成功确认
1 2 3
| gcc --version g++ --version gdb --version
|
1.2.1CMake安装
1.2.2安装成功确认
2GCC编译器使用
2.1编译过程
2.1.1预处理
产生.i文件
1
| g++ -E test.cpp -o test.i //-E 指示编译器对输入文件预处理
|
2.1.2编译
产生.s文件
1
| g++ -S test.i -o test.s //-S 指示编译器为C++代码产生汇编文件后停止编译
|
2.1.3汇编
产生.o文件
2.1.4链接
产生bin文件
2.2g++的重要编译参数
2.2.1 -g 编译带调试信息的可执行文件
2.2.2 -o[n] 优化源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| g++ -o2 test.cpp
|
2.2.3 -l和-L 指定库文件 | 指定库文件路径
1 2 3 4 5 6 7 8 9 10
| g++ -L/home/bing/mytestlibfolder -lmytest test.cpp
|
2.2.4 -I 指定头文件搜索目录
1 2 3 4 5 6 7 8
| g++ -I/myinclude test.cpp
|
2.2.5 -wall 打印警告信息
2.2.6 关闭警告信息
2.2.7 -std=c++11 设置编译标志
1 2
| g++ -std=c++11 test.cpp
|
2.2.8 -D 定义宏
示例代码
1 2 3 4 5 6 7 8 9 10 11
| #include <stdio.h> int main() { #ifdef DEBUG printf("DEBUG LOG\n"); #endif printf("in\n"); }
|
3实战g++编译
最初的目录结构
3.1直接编译
简单编译,运行
1 2 3 4
| g++ main.cpp src/Swap.cpp -Ihead
./a.out
|
增加参数编译,运行
1 2 3 4
| g++ main.cpp src/Swap.cpp -Ihead -std=c++11 -O2 -Wall -o b.out
./b.out
|
3.2 生成库文件并编译
链接静态库生成可执行文件
1 2 3 4 5 6 7 8 9 10
| $cd src
g++ Swap.cpp -c -I../head
ar rs libSwap.a Swap.o
$cd ..
g++ main.cpp -Ihead -Lsrc -lSwap -o staticmain
|
连接动态库生成可执行文件
1 2 3 4 5 6 7 8 9 10 11
| $cd src
g++ Swap.cpp -I../head -fPIC -shared -o libSwap.so
gcc Swap.cpp -I../include -c -fPIC gcc -shared -o libSwap.so Swap.o
$cd ..
g++ main.cpp -Ihead -Lsrc -lSwap -o sharemain
|
编译完成后的目录结构
运行staticmain
运行sharemain
1 2
| LD_LIBRARY_PATH=src ./sharemain
|
4GDB调试器
前言:
GDB(GNU Debugger)是一个用来调试C/C++程序的功能强大的调试器,是Linux系统开发 C/C++最常用的调试器
程序员可以使用GDB来跟踪程序中的错误,从而减少程序员的工作量。
Linux 开发C/C++ 一定要熟悉 GDB
VSCode是通过调用GDB调试器来实现C/C++的调试工作的;
Windows 系统中,常见的集成开发环境(IDE),如 VS、VC等,它们内部已经嵌套了相应的调试 器
GDB主要功能:
- 设置断点(断点可以是条件表达式)
- 使程序在指定的代码行上暂停执行,便于观察
- 单步执行程序,便于调试
- 查看程序中变量值的变化
- 动态改变程序的执行环境
- 分析崩溃程序产生的core文件
4.1常用调试命令参数
调试开始:执行gdb [exefilename] ,进入gdb调试程序,其中exefilename为要调试的可执行文件名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| $(gdb)help(h) $(gdb)run(r) $(gdb)start $(gdb)list(l) $(gdb)set $(gdb)next(n) $(gdb)step(s) $(gdb)backtrace(bt) $(gdb)frame(f) $(gdb)info(i) $(gdb)finish $(gdb)continue(c) $(gdb)print(p) $(gdb)quit(q) $(gdb)break+num(b) $(gdb)info breakpoints $(gdb)delete breakpoints num(d) $(gdb)display $(gdb)undisplay $(gdb)watch $(gdb)i watch $(gdb)enable breakpoints $(gdb)disable breakpoints $(gdb)x $(gdb)run argv[1] argv[2] $(gdb)set follow-fork-mode child
|
Tips:
- 编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main
- 回车键:重复上一命令
4.2调试test项目
5CMake