【问题标题】:LLDB setting arguments from external program or shellLLDB 从外部程序或 shell 设置参数
【发布时间】:2015-04-22 00:48:55
【问题描述】:

我开始使用 LLDB 作为 GDB 的替代品。通常我可以为特定目标调用调试器

$ gdb target
(gdb) set args `python -c 'print "a"*200'`

或者,

$ gdb target
(gdb) set args $(python -c 'print "a"*200')

这意味着我可以在 shell 中调用 Python 并将其管道输出用作 GDB 中的参数。但是我不能在 LLDB 中做到这一点,即使 LLDB 在很多方面都类似于 GDB。

$ lldb target
(lldb) settings set target.run-args `python -c 'print "a"*200'`

我知道可以这样做

$ lldb target -- `python -c 'print "a"*200'`

然而,一开始我无法在不退出 LLDB 的情况下更改参数。有更好的主意吗?

谢谢!

【问题讨论】:

    标签: shell gdb lldb


    【解决方案1】:

    反引号版本违反了 lldb 使用反引号来表示“将反引号中的字符串评估为当前内容中的表达式并将内容替换为命令参数。反斜杠应该可以工作,但它看起来像命令在这种情况下,解析器会删除反引号。请向 lldb.llvm.org 上的错误报告者提交有关此问题的错误...

    "$(" 版本将与一个附带条件一起工作,命令解析器通过在命令输入中查找选项开始,因此它需要 -c 作为 settings set 的选项。但是你可以通过反斜杠保护“-”来解决这个问题:

    (lldb) set set target.run-args  $(python \-c 'print "a"*200')
    (lldb) run
    Process 12940 launched: '/bin/ls' (x86_64)
    ls: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: No such file or directory
    Process 12940 exited with status = 1 (0x00000001) 
    

    【讨论】:

    • 我测试了在-c 之前添加的反斜杠,\-c 仍然被解析为第二个参数。它返回lldb: unrecognized option `-c'error: unknown or ambiguous option。所以我在空格前添加了反斜杠以确保没有歧义,这次它被解析为 shell 命令。但是当我运行程序时,它显示/bin/sh: python -c print "a"*200: command not found,我猜命令(python)没有在shell中调用。我在 OS X 10.10 和 Fedora 21 上都测试了 LLDB 3.5。你能提供更多说明吗?非常感谢。
    • 在空格前加一个反斜杠会将 python 和 \c 绑在一起,所以这是有道理的。
    • 我尝试了上面在 Xcode6.3 的 TOT SVN lldb 和 lldb 中显示的行,并且都有效。你能告诉我当你尝试这条线时发生了什么吗?
    猜你喜欢
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多