【问题标题】:How can I exit lldb after running commands with -o使用 -o 运行命令后如何退出 lldb
【发布时间】:2014-10-08 22:09:06
【问题描述】:

我想从脚本运行类似以下命令:

lldb -f /path/to/my/file -o command1 -o command2 ... -o detach

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

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

【问题讨论】:

标签: lldb


【解决方案1】:

这似乎对我有用:

$ 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.dylibmalloc libsystem_malloc.dylib`malloc: -> 0x7fff9374136b:pushq %rbp 0x7fff9374136c: movq %rsp, %rbp 0x7fff9374136f: pushq %rbx 0x7fff93741370: pushq %rax

$(回到提示符)

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

-o "script import os; os._exit(1)"

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

【讨论】:

  • 这对 OP 不起作用,因为他说他的平台上没有 Python。
  • 哎呀.. 没意识到!
  • 有没有办法只在程序成功运行的情况下退出,而不是无条件地退出?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多