是否可以使用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()
答案 0 :(得分: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 ...