【问题标题】:Extract state from non-interactive LLDB session?从非交互式 LLDB 会话中提取状态?
【发布时间】:2019-02-13 01:21:25
【问题描述】:

是否可以使用 LLDB 提取 C/C++ 程序的当前状态,而无需启动交互式会话?我已经看到了一些关于 LLDB API 的信息,但我没有看到太多关于如何使用它的信息,以及它是否可以完成我正在寻找的东西。

理想情况下,我会用 Python 或其他东西编写一些代码,即我正在调试的代码外部,我使用 LLDB API 获取有关当前程序的信息,例如当前变量和值,并且可以启动和停止执行。这(或其中的一个子集)可能吗?有什么替代品吗?

这是我想做的一些伪代码:

state = program.getState()
print state.values
program.next()
newState = state.set("newVariable", 10)
program.setState(newState)
program.continue()

【问题讨论】:

    标签: debugging lldb


    【解决方案1】:

    Xcode 调试器是使用 lldb 的 API 实现的。 Xcode 恰好也提供了一个 lldb 命令控制台,但所有 UI 命令都是直接使用公共 SB API 实现的。

    所以当然可以为所欲为。

    以下是使用 SB API 驱动程序的示例:

    https://github.com/llvm/llvm-project/blob/master/lldb/examples/python/process_events.py

    以下是获取所有全局变量及其值的示例:

    https://github.com/llvm/llvm-project/blob/master/lldb/examples/python/globals.py

    该目录中还有许多其他示例可以完成您可能感兴趣的部分工作。如果您想(在合理范围内)使用 SB API 做任何事情但找不到方法,请使用http://bugs.llvm.org 提交错误。其目的是 SB API 为 LLDB 提供一个完整的接口,与命令解释器正交。

    当然,如果您愿意(通过 SBCommandInterpreter 类),您也可以在非交互模式下使用命令解释器,但我不建议对调试器进行编程,因为这最终会将您的代码与各种 lldb 命令的输出,我们不保证输出为 API...

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 2012-10-18
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多