【发布时间】:2021-09-12 19:33:38
【问题描述】:
我有一些简单的 gdb 定义,我想在 lldb 中实现。我使用一个小的包装脚本,它实际生成 gdb 定义,然后在我启动 gdb 时加载它们。最简单的是
define rm
run $LIBLIST $KEXTRAS $EXTRAS
end
它只定义了一个自定义 rm 命令,该命令使用包装脚本中确定的命令行参数运行二进制文件。
我想在 lldb 中进行模拟。我试过编写 python 脚本,我可以让它们加载和运行,但似乎该命令是在 python 解释器下运行的,因此调试器没有捕获事件(如 CTRL-C 中断调试器) .
这是我目前得到的:
import os
import lldb
def __lldb_init_module(debugger, dict):
debugger.HandleCommand('command script add -f $PYPKG.rm_command rm')
def rm_command( debugger, command, result, internal_dict):
debugger.HandleCommand( 'run $LIBLIST $KEXTRAS $EXTRAS' )
我也尝试过使用 debugger.GetSelectedTarget().Launch,但得到的结果几乎相同。我得到的最接近的是指定 lldb.eLaunchFlagStopAtEntry LaunchFlag,然后在脚本返回后必须在 llvm 中继续。这很接近,但是需要输入两个命令有点烦人。
如何从 lldb 脚本启动进程,以便可以像在 lldb 本身中使用运行命令一样对其进行调试?
(对于这个示例,我知道我可以只在 lldb 的命令行上传递命令行参数,但更复杂的示例将脚本中的参数与我在调试时想要指定的值结合起来)
(我也知道你可以为这样的一个衬里创建一个别名,但我有一些更复杂的脚本不可能作为别名)
【问题讨论】: