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] |
调用时传参 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律