LLDB 在“step”、“next”等之后中止断点命令执行

LLDB aborts breakpoint command execution after `step`, `next` etc

当我在 LLDB 中遇到断点时,我想执行多个自动步进我的程序的命令。

示例(这应该改变程序以跳过 foo::bar 进行的第一次调用):

breakpoint set --method foo::bar --command s --command 'thread return'

当我尝试上面的例子时:

  1. 我确实遇到了断点
  2. s被执行
  3. 但随后打印了以下内容:error: Aborting reading of commands after command #1: 's' continued the target.thread return 未执行

lldb 执行“编程步骤”的方式与 gdb 不同。在 lldb 中,如果您想执行“步骤,检查某些内容,再次执行”类型的操作,您可以通过使用与内置 lldb step/next/etc 相同的功能实现您自己的步骤命令版本来实现操作。然后将其作为新命令添加到 lldb 步骤命令旁边,并像调用内置步骤命令一样调用它。您甚至可以在每次调用时将参数传递给它,并在您的步骤中使用它们。多个这样的操作可以同时进行,它们也自然嵌套。

以下是脚本化步骤的详细信息:

https://lldb.llvm.org/use/python-reference.html#using-the-python-api-to-create-custom-stepping-logic

在您的情况下,您可以使用花式步骤作为断点命令中的最终操作。

lldb 的断点回调在导致目标 运行 的第一个命令处停止。它不需要支持这种复杂性,因为用户可以通过脚本步骤做同样的事情,所以它抓住机会不这样做。