1 打包
g++ -o appEXE -std=c++11 *.cpp -I. -I/usr/local/include -I/usr/include -L/usr/local/lib -L/home/lib -laaa -lbbb -lccc -L/tmp/lib -lcurl
g++ -g -o appEXE_debug -std=c++11 *.cpp -I. -I/usr/local/include -I/usr/include -L/usr/local/lib -L/home/lib -laaa -lbbb -lccc -L/tmp/lib -lcurl
这个 g++ 命令是用于编译多个 C++ 源文件并链接它们以生成一个可执行文件的。
g++: 这是 GNU C++ 编译器,用于编译 C++ 代码。
-g: 这个选项告诉编译器生成调试信息,这使得你能够使用像 gdb 这样的调试工具来调试你的程序。
-o appEXE_debug: 这个选项指定了输出文件的名称,即编译和链接后的可执行文件名为 appEXE_debug。
-std=c++11: 这个选项告诉编译器使用 C++11 标准来编译代码。
*.cpp: 这是一个通配符,它告诉编译器编译当前目录下的所有 .cpp 文件。
-I.: 这个选项告诉编译器在当前目录下搜索头文件。. 表示当前目录。
-I/usr/local/include 和 -I/usr/include: 这些选项告诉编译器在 /usr/local/include 和 /usr/include 目录下搜索头文件。
-L/usr/local/lib 和 -L/home/lib: 这些选项告诉链接器在指定的目录下搜索库文件。-L 选项后面跟的是库文件的搜索路径。
-laaa, -lbbb, -lccc: 这些选项告诉链接器链接名为 libaaa.so, libbbb.so, 和 libccc.so 的共享库(在 Unix/Linux 系统中,库文件通常以 lib 开头,并以 .so、.so.x 或 .a 结尾)。注意,-l 选项后面只跟库名(不包括前缀 lib 和后缀 .so 或 .a)。
-lcurl: 告诉链接器链接名为 libcurl.so 的库,这通常是用于处理 HTTP 请求的库。
总之,这个命令的作用是:使用 C++11 标准编译当前目录下的所有 .cpp 文件,并链接到指定的库文件,生成一个名为 appEXE_debug 的可执行文件,同时生成调试信息以便于调试。
2 GDB调试
2.1 命令大全
GDB(GNU Debugger)是Linux下的一款强大的程序调试工具,可以用于查看和修改程序的运行状态。以下是一些常用的GDB调试命令:
1 GDB+ 程序名
2 set args 参数1 参数2
3 run: 开始执行程序,并且如果有断点,会在第一个断点处停下来
4 start:开始执行程序,运行程序
5 next:执行下一行代码,跳过函数调用
6 step:执行下一行代码,进入函数调用
7 continue:继续执行程序,直到遇到断点
8 print:打印变量的值
9 break:在代码的指定行设置断点
10 info break:查看当前设置的所有断点
11 delete breakpoints:删除指定的断点
12 finish:执行当前函数直到返回并打印返回值
13 watch:监视变量的值,一旦变量的值发生变化,程序会停下来
14 list:列出源代码的指定行
15 quit:退出GDB
2.2 案例
1、开始调试程序appEXE_debug: gdb /tmp/appEXE_debug
2、设置输入参数1个: set args /tmp/config.txt
3、设置断点cac.cpp的第10行:break cac.cpp:10
4、运行程序:run
5、打印某个变量:print calNums
6、继续执行:continue
7、执行下一行代码,跳过函数调用:next
8、执行下一行代码,进入函数调用:step
9、退出调试:quit