g++ 编译调试
g++
我们简单地展示编译命令的写法,以编译 file.cpp 生成 file.exe 为例
g++ [options] (-std=c++11) file file.cpp
options:
选项 | 作用 | 选项 | 作用 |
---|---|---|---|
-w |
关闭警告信息 | -I ../include |
添加头文件搜索目录( include ) |
-c |
编译生成 .o 文件 | -l |
指定库文件( libaray ) |
-o |
编译 .o 文件为 .exe 文件 | -L |
指定库文件搜索目录 |
-g |
开启 gdb 调试 | -Wall |
输出 warning 信息 |
-E |
输出预处理结果 | -D |
在编译时定义宏,该宏可以在代码中使用,宏值默认为 1 |
-S |
生成汇编代码 | -O -O2 |
优化编译 |
示例代码
// -Dname 定义宏 name ,默认定义内容为字符串 1
#include <stdio.h>
int main()
{
#ifdef DEBUG
printf("DEBUG LOG\n");
#endif
prinf("in\n");
}
// 在编译时使用 g++ -DDEBUG main.cpp 则会输出 DEBUG LOG
GDB
编译程序时添加 -g
参数,然后才能进行调试;回车键重复上一命令
g++ -g main.cpp -o main
调试的命令参数如下:
命令 | 作用 |
---|---|
help(h) |
查看命令帮助 |
run(r) |
运行文件 |
start |
单步执行,运行程序,停在第一行执行语句 |
list(l) |
查看源代码(l n 以第 n 行为中心查看代码,l func 查看具体函数) |
set |
设置变量的值 |
next(n) |
单步执行(函数直接执行) |
quit(q) |
退出 |
display |
追踪查看变量值 |
undisplay |
取消追踪 |
step(s) |
单步执行(跳入函数内部执行) |
backtrace(bt) |
查看函数调用的栈帧和层级关系 |
info(i) |
查看函数内部局部变量的值 |
finish |
结束当前函数,返回到函数调用点 |
continue(c) |
继续执行 |
print(p) |
打印值及地址 |
b num |
在 num 行设置断点 |
i b |
查看所有断点 |
d num |
删除第 num 个断点 |
enable breakpoints |
启用断点 |
disable breakpoints |
禁用断点 |
watch |
当被观察的变量修改时显示 |
i watch |
显示观察点 |
run argv[1] argv[2] |
调用时传参 |