【问题标题】:(LLDB on MacOs Catalina) Shell Expansion Failed(MacOs Catalina 上的 LLDB)Shell 扩展失败
【发布时间】:2020-03-06 01:46:17
【问题描述】:
当尝试在 lldb 中使用 r 或 run 命令时,我收到如下错误: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 讨论这是否良好。)bash 和 zsh 具有用于交互式/非交互式会话的单独初始化文件,这使得避免这个问题稍微容易一些。