使用 gdb 和 lldb
逐步执行程序
使用 gdb 和 lldb 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。
交互式调试器
gdb(GNU)和 lldb(LLVM)可以暂停正在运行的程序、检查变量,并逐行执行代码。它们的命令相似。
编译时包含调试信息
请始终使用 -g(最好再加上 -O0)进行构建,这样调试器才能将机器代码映射回源代码。
g++ -g -O0 main.cpp -o app
# then
gdb ./app设置断点
断点会在选定位置暂停执行。
- gdb:
break main.cpp:10或break myFunc - lldb:
breakpoint set --file main.cpp --line 10或b myFunc
运行程序
使用 run(或 r)开始执行。程序会在遇到的第一个断点处停止,等待您进行检查。
逐步执行代码
核心单步执行命令(在 gdb 和 lldb 中名称相同):
next/n:执行一行代码,越过其中的调用step/s:进入一个调用finish:运行到当前函数返回continue/c:继续运行,直到下一个断点
检查变量
打印值以了解程序状态。
- gdb:
print x、print arr[2] - lldb:
frame variable或p x
示例调试目标
请考虑下面这个程序;您可以在循环处设置断点,并在每次迭代时打印 sum。
#include <iostream>
int main() {
int sum = 0;
for (int i = 1; i <= 3; ++i) {
sum += i;
}
std::cout << sum << "\n";
return 0;
}调用栈
程序停止时,backtrace(gdb)或 bt(lldb)会显示函数调用链。使用 frame N 切换到调用者,并检查其中的局部变量。
监视点
当变量发生变化时,监视点会停止程序运行,帮助您找到意外修改发生的位置。
- gdb:
watch counter - lldb:
watchpoint set variable counter
条件断点
仅在条件成立时暂停,从而避免手动逐步执行。
- gdb:
break loop.cpp:5 if i == 99 - lldb:
breakpoint set --line 5 --condition "i == 99"
调试崩溃
在调试器下运行发生崩溃的程序;发生段错误时,程序会停在出错的代码行。然后使用 bt 查看程序是如何运行到这里的。事后您也可以分析核心转储。
快速检查
回忆单步执行命令。
回顾
您学会了交互式调试。
- 使用
-g -O0进行构建 - 设置断点,使用
run,然后使用next/step/finish - 使用
print/frame variable和backtrace进行检查 - 监视点和条件断点可以定位棘手的错误
常见问题解答
「使用 gdb 和 lldb」课时是免费的吗?
是的 — 「使用 gdb 和 lldb」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。
「使用 gdb 和 lldb」这节课中我会学到什么?
逐步执行程序 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C++ Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用 gdb 和 lldb」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C++ Academy 课中编写并运行代码吗?
能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 gdb 和 lldb
- AddressSanitizer
- UBSan 与 TSan
- Valgrind 基础