【问题标题】:(LLDB on MacOs Catalina) Shell Expansion Failed(MacOs Catalina 上的 LLDB)Shell 扩展失败
【发布时间】:2020-03-06 01:46:17
【问题描述】:

当尝试在 lldb 中使用 rrun 命令时,我收到如下错误:error: shell expansion failed (reason: invalid JSON). consider launching with 'process launch'.

当我只使用process launch 时它可以工作,但我真的不想这样做。

有什么方法可以使别名或外壳扩展不失败?

【问题讨论】:

    标签: c macos debugging lldb macos-catalina


    【解决方案1】:

    lldb 进行 shell 扩展的方式是使用您传递的命令参数运行一个名为 lldb-argdumper 的小工具(它位于 macOS 上的 Xcode.app/Contents/SharedFrameworks/LLDB.framework/Resources 中)。 lldb-argdumper 将 argv 的内容包装为 JSON,并将其写入标准输出。 lldb 然后将 JSON 解析回 args 并在启动进程时将 args 一个一个插入到 argc/argv 数组中。

    输出中的某些内容未正确包装。您可以通过查看 lldb-argdumper 的输出和您的参数来了解它是什么。不管它是什么,它都是一个错误,所以如果你能重现它,请用http://bugs.llvm.org 提交你的示例。

    (lldb) command alias run-no-shell process launch -X 0 --
    

    将产生一个不进行 shell 扩展的别名。你也可以把它放在你的 ~/.lldbinit 中。

    【讨论】:

      【解决方案2】:

      我最近遇到了这个问题。 TL;DR:确保您的 shell 在初始化期间不回显任何内容。运行<your-shell> -c date确认;只应打印日期。

      问题是我的 shell 的初始化文件正在回显一些内容,这些内容被添加到 lldb-argdumper 的 JSON 输出中。 (lldb 不会直接运行 lldb-argdumper;它会调用您的默认 shell 来运行 lldb-argdumper。)

      具体来说,我使用fish 作为我的shell,它没有用于交互式和非交互式会话的单独初始化路径。 (请参阅 this issue 讨论这是否良好。)bashzsh 具有用于交互式/非交互式会话的单独初始化文件,这使得避免这个问题稍微容易一些。

      【讨论】:

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