Reputation: 349
When trying to use the r
or run
commands in lldb I get an error like this: error: shell expansion failed (reason: invalid JSON). consider launching with 'process launch'.
It works when I just use process launch
but I really do not feel like doing that.
Is there any way I could make either an alias or make shell expansions not fail?
Upvotes: 1
Views: 1652
Reputation: 95
I ran into this recently. TL;DR: make sure your shell does not echo anything during initialization. Run <your-shell> -c date
to confirm; only the date should be printed.
The problem was that my shell's initialization file was echoing some stuff, which was getting prepended to lldb-argdumper
's JSON output. (lldb
doesn't run lldb-argdumper
directly; it invokes your default shell to run lldb-argdumper
.)
Specifically, I use fish
as my shell, which does not have separate initialization paths for interactive and non-interactive sessions. (See this issue for discussion of whether this is good.) bash
and zsh
have separate init files for interactive/non-interactive sessions, which makes avoiding this problem slightly easier.
Upvotes: 0
Reputation: 27203
The way lldb does shell expansion is to run a little tool called lldb-argdumper
(it is in Xcode.app/Contents/SharedFrameworks/LLDB.framework/Resources on macOS) with the command arguments that you passed. lldb-argdumper
wraps the contents of argv as JSON, and writes that to stdout. lldb then parses the JSON back into args and inserts the args one by oneinto the argc/argv array when it launches the process.
Something in the output is not getting properly wrapped. You can probably see what it is by looking at the output of lldb-argdumper
with your arguments. Whatever it is, it's a bug, so if you can reproduce it please file with your example with http://bugs.llvm.org.
(lldb) command alias run-no-shell process launch -X 0 --
will produce an alias that doesn't do shell expansion. You can also put this in your ~/.lldbinit.
Upvotes: 1