0Pricing
C++ Academy · 课时

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 gdb 和 lldb
  2. AddressSanitizer
  3. UBSan 与 TSan
  4. Valgrind 基础
← 返回 C++ Academy