使用 -o 运行命令后如何退出 lldb

jon*_*gan 5 lldb

我想从脚本中运行类似以下命令的内容:

lldb -f /path/to/my/file -o command1 -o command2 ... -o detach
Run Code Online (Sandbox Code Playgroud)

有没有办法在执行后退出lldb而不进入交互模式?传入 -o exit 或 -o quit 失败,并显示“正在中止 after_file 命令执行,命令:‘退出’失败。” 在有或没有退出/退出的情况下运行上述命令会使终端处于 lldb 提示符处,这会阻止我仅运行此命令并将输出重定向到磁盘上的某个位置。

这样做的最终目标是在某些事情发生时按需获取我的命令的输出。这个平台上没有 Python 解释器,所以这不是一个选项。有什么建议?

Enr*_*ata 5

这似乎对我有用:

$ xcrun lldb /bin/ls -o "b malloc" -o "run" -o "script import os; os._exit(1)"

(lldb) 目标创建“/bin/ls”

当前可执行文件设置为 '/bin/ls' (x86_64)。

(lldb) b malloc

断点 1:3 个位置。

(lldb) 运行

进程 640 启动:'/bin/ls' (x86_64)

(lldb) 脚本导入操作系统;os._exit(1)

过程640停止*线#1:TID = 0x11033,0x00007fff9374136b libsystem_malloc.dylibmalloc, stop reason = breakpoint 1.2 frame #0: 0x00007fff9374136b libsystem_malloc.dylib的malloc libsystem_malloc.dylib`malloc: - > 0x7fff9374136b:pushq%RBP 0x7fff9374136c:MOVQ%RSP,%RBP 0x7fff9374136f:pushq%RBX 0x7fff93741370:pushq%RAX

$(回到提示)

这有点恶心,但城堡的关键是:

-o "script import os; os._exit(1)"
Run Code Online (Sandbox Code Playgroud)

sys.exit(1) 不起作用(我们捕获它并阻止它退出 LLDB),但 os._exit() 是一个开放的免费赠品。随意认为这是一个错误。


Jim*_*ham 1

是的,这只是一个错误。“-o”命令全部收集起来并交给子解释器在启动交互式解释器之前执行。不幸的是,“退出”只是退出子解释器。该问题已在 TOT lldb 中修复,不久后应该会成为 Apple 官方版本。