【问题标题】:LLDB aborts breakpoint command execution after `step`, `next` etcLLDB 在 `step`、`next` 等之后中止断点命令执行
【发布时间】:2022-01-23 10:58:55
【问题描述】:

当我在 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 未执行

【问题讨论】:

  • 你读过GDB's manual on breakpoint commands吗?你可以给step一个count argument
  • 感谢您的链接。我明白了:gdb 确实为这种设计选择提供了理由。它在 gdb 文档中,所以我没有阅读它。 “你可以给 step 一个计数参数” - 这对我的用例没有帮助 - 我想运行不同的命令(参见我的问题中的示例)

标签: c++ c debugging lldb


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 2016-11-13
    • 1970-01-01
    • 2014-07-20
    • 2017-03-28
    • 2013-04-27
    • 2017-12-16
    • 2014-05-06
    相关资源
    最近更新 更多