如何从 LLDB 调用带有断点的 Swift 函数?

How to call Swift function with breakpoint from LLDB?

我知道一个 Swift 函数的名称,并且想从 LLDB 调用该函数以进行调试。

我试过:

expr -- function_with_a_breakpoint()

这会运行函数并正确解析,但不会到达我设置的断点。理想情况下,我想从 LLDB 内部触发,而不必手动从应用程序 UI 触发该功能。这样会更方便。

Swift LLDB 中带有断点的函数

我在这个答案中添加了额外的注释,因为当我们想要到达断点时,我们通常会从 LLDB 触发一个 Swift 函数。

我喜欢在 LLDB 中管理断点,因为我不会中断 Xcode 和控制台之间的流程。

触发函数

您的问题的答案就在这里。我们必须设置 -i 标志来触发 LLDB 的函数:

(lldb) expr -i 0 -- function_with_a_breakpoint()

程序断点

我们通常使用LLDB中的函数触发器来手动触发断点。

如果我们想在函数上设置断点并且我们知道名称:

(lldb) breakpoint set -n function_with_a_breakpoint

使用文件名和行号:

(lldb) breakpoint set --file foo.swift --line 12
// copy the breakpoint number into the modify command below

我们还可以使用 --one-shot 标志将断点创建为 one-off。

(lldb) breakpoint modify --one-shot 1

奖金工作流程注释

示例流程:

(lldb) run
(lldb) kill
... hit breakpoints...
(lldb) continue

所以我们可以在上面的例子kill之后触发函数