Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect arguments passed to program when using escaped double quotes in launch.json #1222

Closed
abhamishquic opened this issue Jan 25, 2025 · 1 comment
Labels
cause:Not a bug Everything works as intended, not a bug.

Comments

@abhamishquic
Copy link

abhamishquic commented Jan 25, 2025

OS:

Ubuntu 22.04.4 LTS

VSCode version:

1.96.2
fabdb6a30b49f79a7aba0f2ad9df9b399473380f
x64

CodeLLDB version: 1.12.2
Compiler:

clang version 19.0.0git (https://github.com/llvm/llvm-project.git 9f44d5d9d0903adaa9deb35d33056202e5030cb3)
Target: x86_64-unknown-linux-gnu

Debuggee:

a.out: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, with debug_info, not stripped

Issue

Arguments not passed correctly - when using double quotes.

For following launch.json file:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "terminal": "console",
            "name": "Debug",
            "program": "${workspaceRoot}/a.out",
            "args": [
                "--pass-pipeline=\"builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)\"",
            ],
            "cwd": "${workspaceRoot}"
        }
    ]
}

with this program:

#include "iostream"
using namespace std;
int main(int argc, char **argv)
{
	cout << argc << endl;
	for ( int i = 0; i < argc ; i ++) {
		cout << *(argv + i )  << endl;
	}
	return 0;
}

compiled with clang++ -g a.cpp

I expect following lldb invocation:

/local/mnt/workspace/.vscode-server/extensions/vadimcn.vscode-lldb-1.11.2/lldb/bin/lldb -- /local/mnt/workspace/simple_test/a.out --pass-pipeline="builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)"

which the debug console correctly displays:

Image

On inspecting value of argv we can see that the second argument is:

(char *) 0x00007fffffffdb89 "--pass-pipeline=\"builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)\""

This is unexpected - i would expect it to be:

(char *) 0x00007fffffffdb89 "--pass-pipeline=builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)"

The difference being in the presence of " character:

- (char *) 0x00007fffffffdb89 "--pass-pipeline=builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)"
+ (char *) 0x00007fffffffdb89 "--pass-pipeline=\"builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)\""

Running lldb with program arguments as printed in debug console results in correct behaviour(on bash shell):

Image

In order to see where the problem may lie, I tried to:

  1. First look at the verbose logs - these are being passed the arguments as it is - i.e. with escaped " as they need to be in json format.
  2. Look at what extension does to interpret these command - conditionally uses string-argv

I considered debugging the extension on my end by building from source however ended up getting stuck in make step which complained about missing headers ( solvable given more time but i have already spent too much time on this ).

Verbose logs:

Verbose log
Initial debug configuration: {
  type: 'lldb',
  request: 'launch',
  terminal: 'console',
  name: 'Debug',
  program: '${workspaceRoot}/a.out',
  args: [
    '--pass-pipeline="builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)"'
  ],
  cwd: '${workspaceRoot}',
  __configurationTarget: 6
}
Resolved debug configuration: {
  type: 'lldb',
  request: 'launch',
  terminal: 'console',
  name: 'Debug',
  program: '${workspaceRoot}/a.out',
  args: [
    '--pass-pipeline="builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)"'
  ],
  cwd: '${workspaceRoot}',
  __configurationTarget: 6,
  relativePathBase: '/local/mnt/workspace/simple_test',
  _adapterSettings: {
    displayFormat: 'auto',
    showDisassembly: 'auto',
    dereferencePointers: true,
    suppressMissingSourceFiles: true,
    evaluationTimeout: 5,
    consoleMode: 'commands',
    sourceLanguages: null,
    scriptConfig: {},
    terminalPromptClear: null,
    evaluateForHovers: true,
    commandCompletions: true,
    reproducer: false
  }
}
liblldb: /usr2/abhamish/.vscode-server/extensions/vadimcn.vscode-lldb-1.11.2/lldb/lib/liblldb.so
environment: {}
settings: { evaluateForHovers: true, commandCompletions: true }
[DEBUG codelldb] Connecting to 127.0.0.1:46605
[DEBUG codelldb] New debug session
[DEBUG codelldb::dap_codec] --> {"command":"initialize","arguments":{"clientID":"vscode","clientName":"Visual Studio Code","adapterID":"lldb","pathFormat":"path","linesStartAt1":true,"columnsStartAt1":true,"supportsVariableType":true,"supportsVariablePaging":true,"supportsRunInTerminalRequest":true,"locale":"en","supportsProgressReporting":true,"supportsInvalidatedEvent":true,"supportsMemoryReferences":true,"supportsArgsCanBeInterpretedByShell":true,"supportsMemoryEvent":true,"supportsStartDebuggingRequest":true,"supportsANSIStyling":true},"type":"request","seq":1}
[DEBUG codelldb::dap_codec] <-- {"seq":1,"type":"response","request_seq":1,"success":true,"command":"initialize","body":{"exceptionBreakpointFilters":[{"default":true,"filter":"cpp_throw","label":"C++: on throw","supportsCondition":true},{"default":false,"filter":"cpp_catch","label":"C++: on catch","supportsCondition":true}],"supportTerminateDebuggee":true,"supportsCancelRequest":true,"supportsClipboardContext":true,"supportsCompletionsRequest":true,"supportsConditionalBreakpoints":true,"supportsConfigurationDoneRequest":true,"supportsDataBreakpointBytes":true,"supportsDataBreakpoints":true,"supportsDelayedStackTraceLoading":true,"supportsDisassembleRequest":true,"supportsEvaluateForHovers":true,"supportsExceptionFilterOptions":true,"supportsExceptionInfoRequest":true,"supportsFunctionBreakpoints":true,"supportsGotoTargetsRequest":true,"supportsHitConditionalBreakpoints":true,"supportsInstructionBreakpoints":true,"supportsLogPoints":true,"supportsModulesRequest":true,"supportsReadMemoryRequest":true,"supportsRestartRequest":true,"supportsSetVariable":true,"supportsStepInTargetsRequest":true,"supportsSteppingGranularity":true,"supportsWriteMemoryRequest":true}}
[DEBUG codelldb::dap_codec] --> {"command":"launch","arguments":{"type":"lldb","request":"launch","terminal":"console","name":"Debug","program":"/local/mnt/workspace/simple_test/a.out","args":["--pass-pipeline=\"builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)\""],"cwd":"/local/mnt/workspace/simple_test","__configurationTarget":6,"relativePathBase":"/local/mnt/workspace/simple_test","_adapterSettings":{"displayFormat":"auto","showDisassembly":"auto","dereferencePointers":true,"suppressMissingSourceFiles":true,"evaluationTimeout":5,"consoleMode":"commands","sourceLanguages":null,"scriptConfig":{},"terminalPromptClear":null,"evaluateForHovers":true,"commandCompletions":true,"reproducer":false},"__sessionId":"c4ec79cc-5862-4aad-91b8-a28b10d02527"},"type":"request","seq":2}
[DEBUG codelldb::dap_codec] <-- {"seq":2,"type":"event","event":"output","body":{"category":"console","output":"Console is in 'commands' mode, prefix expressions with '?'.\n"}}
INFO(Python) 03:59:26 lang_support: languages: set()
[DEBUG codelldb::dap_codec] <-- {"seq":3,"type":"event","event":"initialized"}
[DEBUG codelldb::dap_codec] --> {"command":"setBreakpoints","arguments":{"source":{"name":"a.cpp","path":"/local/mnt/workspace/simple_test/a.cpp"},"lines":[5],"breakpoints":[{"line":5}],"sourceModified":false},"type":"request","seq":3}
[DEBUG codelldb::dap_codec] --> {"command":"setFunctionBreakpoints","arguments":{"breakpoints":[]},"type":"request","seq":4}
[DEBUG codelldb::dap_codec] --> {"command":"setInstructionBreakpoints","arguments":{"breakpoints":[]},"type":"request","seq":5}
[DEBUG codelldb::dap_codec] --> {"command":"setExceptionBreakpoints","arguments":{"filters":[],"filterOptions":[{"filterId":"cpp_throw"}]},"type":"request","seq":6}
[DEBUG codelldb::dap_codec] --> {"command":"setDataBreakpoints","arguments":{"breakpoints":[]},"type":"request","seq":7}
[DEBUG codelldb::debug_session] Debug event: 0x55bdd33d5a48 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000001 (breakpoint-changed), data = {bkpt: 1 type: breakpoint added}
[DEBUG codelldb::dap_codec] <-- {"seq":4,"type":"response","request_seq":3,"success":true,"command":"setBreakpoints","body":{"breakpoints":[{"id":1,"line":5,"message":"Resolved locations: 0","verified":true}]}}
[DEBUG codelldb::dap_codec] <-- {"seq":5,"type":"response","request_seq":4,"success":true,"command":"setFunctionBreakpoints","body":{"breakpoints":[]}}
[DEBUG codelldb::debug_session] Debug event: 0x55bdd33d5a48 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000001 (breakpoint-changed), data = {bkpt: 2 type: breakpoint added}
[DEBUG codelldb::dap_codec] <-- {"seq":6,"type":"response","request_seq":5,"success":true,"command":"setInstructionBreakpoints","body":{"breakpoints":[]}}
[DEBUG codelldb::dap_codec] <-- {"seq":7,"type":"response","request_seq":6,"success":true,"command":"setExceptionBreakpoints"}
[DEBUG codelldb::dap_codec] <-- {"seq":8,"type":"response","request_seq":7,"success":true,"command":"setDataBreakpoints","body":{"breakpoints":[]}}
[DEBUG codelldb::dap_codec] --> {"command":"configurationDone","type":"request","seq":8}
[DEBUG codelldb::dap_codec] <-- {"seq":9,"type":"event","event":"output","body":{"category":"console","output":"Launching: /local/mnt/workspace/simple_test/a.out --pass-pipeline=\"builtin.module(convert-math-to-funcs{convert-ctlz}, func.func(convert-scf-to-cf,convert-arith-to-llvm), convert-func-to-llvm, convert-cf-to-llvm, reconcile-unrealized-casts)\"\n"}}
[DEBUG codelldb::dap_codec] <-- {"seq":10,"type":"event","event":"output","body":{"category":"console","output":"Process 2764684 launched: '/local/mnt/workspace/simple_test/a.out'\n"}}
[DEBUG codelldb::debug_session] Debug event: 0x55bdd273cfa8 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000002 (modules-loaded), data = {ld-linux-x86-64.so.2}
[DEBUG codelldb::debug_session] Debug event: 0x55bdd2741ff8 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000002 (modules-loaded), data = {[vdso](0x00007ffff7fc2000)}
[DEBUG codelldb::debug_session] Debug event: 0x55bdd2743858 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000001 (breakpoint-changed), data = {bkpt: 1 type: locations resolved}
[DEBUG codelldb::debug_session] Debug event: 0x55bdd27439a8 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000002 (modules-loaded), data = {a.out}
[DEBUG codelldb::dap_codec] <-- {"seq":11,"type":"response","request_seq":2,"success":true,"command":"launch"}
[DEBUG codelldb::debug_session] Debug event: 0x7f5294000b70 Event: broadcaster = 0x55bdd3360a08 (lldb.process), type = 0x00000001 (state-changed), data = { process = 0x55bdd33609d0 (pid = 2764684), state = running}
[DEBUG codelldb::dap_codec] <-- {"seq":12,"type":"response","request_seq":8,"success":true,"command":"configurationDone"}
[DEBUG codelldb::dap_codec] <-- {"seq":13,"type":"event","event":"module","body":{"module":{"addressRange":"7FFFF7FC3000","id":"7FFFF7FC3000","name":"ld-linux-x86-64.so.2","path":"/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2","symbolFilePath":"/usr/lib/debug/.build-id/41/86944c50f8a32b47d74931e3f512b811813b64.debug","symbolStatus":"Symbols loaded."},"reason":"new"}}
[DEBUG codelldb::dap_codec] <-- {"seq":14,"type":"event","event":"module","body":{"module":{"addressRange":"7FFFF7FC2000","id":"7FFFF7FC2000","name":"[vdso]","path":"[vdso]","symbolStatus":"Symbols not found"},"reason":"new"}}
[DEBUG codelldb::dap_codec] <-- {"seq":15,"type":"event","event":"breakpoint","body":{"breakpoint":{"id":1,"line":5,"message":"Resolved locations: 1","verified":true},"reason":"changed"}}
[DEBUG codelldb::dap_codec] <-- {"seq":16,"type":"event","event":"module","body":{"module":{"addressRange":"555555554000","id":"555555554000","name":"a.out","path":"/local/mnt/workspace/simple_test/a.out","symbolFilePath":"/local/mnt/workspace/simple_test/a.out","symbolStatus":"Symbols loaded."},"reason":"new"}}
[DEBUG codelldb::dap_codec] <-- {"seq":17,"type":"event","event":"continued","body":{"allThreadsContinued":true,"threadId":2764684}}
[DEBUG codelldb::debug_session] Debug event: 0x7f52cc0783a8 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000001 (breakpoint-changed), data = {bkpt: 2 type: locations resolved}
[DEBUG codelldb::debug_session] Debug event: 0x7f52a00678e8 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000001 (breakpoint-changed), data = {bkpt: 2 type: locations resolved}
[DEBUG codelldb::debug_session] Debug event: 0x7f529cbefb48 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000001 (breakpoint-changed), data = {bkpt: 2 type: locations added}
[DEBUG codelldb::dap_codec] <-- {"seq":18,"type":"event","event":"breakpoint","body":{"breakpoint":{"id":2,"message":"Resolved locations: 2","verified":true},"reason":"changed"}}
[DEBUG codelldb::debug_session] Debug event: 0x7f529cb8d558 Event: broadcaster = 0x55bdd314a570 (lldb.target), type = 0x00000002 (modules-loaded), data = {libstdc++.so.6, libm.so.6, libgcc_s.so.1, libc.so.6}
[DEBUG codelldb::dap_codec] <-- {"seq":19,"type":"event","event":"breakpoint","body":{"breakpoint":{"id":2,"message":"Resolved locations: 2","verified":true},"reason":"changed"}}
[DEBUG codelldb::dap_codec] <-- {"seq":20,"type":"event","event":"breakpoint","body":{"breakpoint":{"id":2,"message":"Resolved locations: 2","verified":true},"reason":"changed"}}
[DEBUG codelldb::dap_codec] <-- {"seq":21,"type":"event","event":"module","body":{"module":{"addressRange":"7FFFF7D89000","id":"7FFFF7D89000","name":"libstdc++.so.6","path":"/lib/x86_64-linux-gnu/libstdc++.so.6","symbolFilePath":"/lib/x86_64-linux-gnu/libstdc++.so.6","symbolStatus":"Symbols loaded."},"reason":"new"}}
[DEBUG codelldb::dap_codec] <-- {"seq":22,"type":"event","event":"module","body":{"module":{"addressRange":"7FFFF7CA2000","id":"7FFFF7CA2000","name":"libm.so.6","path":"/lib/x86_64-linux-gnu/libm.so.6","symbolFilePath":"/usr/lib/debug/.build-id/a5/08ec5d8bf12fb7fd08204e0f87518e5cd0b102.debug","symbolStatus":"Symbols loaded."},"reason":"new"}}
[DEBUG codelldb::dap_codec] <-- {"seq":23,"type":"event","event":"module","body":{"module":{"addressRange":"7FFFF7C82000","id":"7FFFF7C82000","name":"libgcc_s.so.1","path":"/lib/x86_64-linux-gnu/libgcc_s.so.1","symbolFilePath":"/lib/x86_64-linux-gnu/libgcc_s.so.1","symbolStatus":"Symbols loaded."},"reason":"new"}}
[DEBUG codelldb::dap_codec] <-- {"seq":24,"type":"event","event":"module","body":{"module":{"addressRange":"7FFFF7A59000","id":"7FFFF7A59000","name":"libc.so.6","path":"/lib/x86_64-linux-gnu/libc.so.6","symbolFilePath":"/usr/lib/debug/.build-id/49/0fef8403240c91833978d494d39e537409b92e.debug","symbolStatus":"Symbols loaded."},"reason":"new"}}
[DEBUG codelldb::debug_session::breakpoints] Callback for breakpoint location 1.1: where = a.out`main + 22 at a.cpp:5:10, address = 0x00005555555551d6, resolved, hit count = 1 

[DEBUG codelldb::debug_session] Debug event: 0x7f5294002b10 Event: broadcaster = 0x55bdd3360a08 (lldb.process), type = 0x00000001 (state-changed), data = { process = 0x55bdd33609d0 (pid = 2764684), state = stopped}
[DEBUG codelldb::dap_codec] <-- {"seq":25,"type":"event","event":"stopped","body":{"allThreadsStopped":true,"hitBreakpointIds":[1],"reason":"breakpoint","threadId":2764684}}
[DEBUG codelldb::dap_codec] --> {"command":"threads","type":"request","seq":9}
[DEBUG codelldb::dap_codec] <-- {"seq":26,"type":"response","request_seq":9,"success":true,"command":"threads","body":{"threads":[{"id":2764684,"name":"1: tid=2764684 "a.out""}]}}
[DEBUG codelldb::dap_codec] --> {"command":"threads","type":"request","seq":10}
[DEBUG codelldb::dap_codec] <-- {"seq":27,"type":"response","request_seq":10,"success":true,"command":"threads","body":{"threads":[{"id":2764684,"name":"1: tid=2764684 "a.out""}]}}
[DEBUG codelldb::dap_codec] --> {"command":"stackTrace","arguments":{"threadId":2764684,"startFrame":0,"levels":1},"type":"request","seq":11}
[DEBUG codelldb::dap_codec] <-- {"seq":28,"type":"response","request_seq":11,"success":true,"command":"stackTrace","body":{"stackFrames":[{"column":10,"id":1001,"instructionPointerReference":"0x5555555551D6","line":5,"moduleId":"555555554000","name":"main","source":{"name":"a.cpp","path":"/local/mnt/workspace/simple_test/a.cpp"}}]}}
[DEBUG codelldb::dap_codec] --> {"command":"stackTrace","arguments":{"threadId":2764684,"startFrame":0,"levels":20},"type":"request","seq":12}
[DEBUG codelldb::disassembly] libc.so.6__libc_start_call_main + 128 at libc_start_call_main.h:58:16 [DEBUG codelldb::disassembly] libc.so.6__libc_start_main_impl + 128 [inlined] call_init at libc-start.c:128:20
libc.so.6__libc_start_main_impl + 128 at libc-start.c:379:5 [DEBUG codelldb::disassembly] a.out_start + 37
[DEBUG codelldb::dap_codec] <-- {"seq":29,"type":"response","request_seq":12,"success":true,"command":"stackTrace","body":{"stackFrames":[{"column":10,"id":1002,"instructionPointerReference":"0x5555555551D6","line":5,"moduleId":"555555554000","name":"main","source":{"name":"a.cpp","path":"/local/mnt/workspace/simple_test/a.cpp"}},{"column":0,"id":1003,"instructionPointerReference":"0x7FFFF7A82D90","line":29,"moduleId":"7FFFF7A59000","name":"__libc_start_call_main","presentationHint":"subtle","source":{"name":"@__libc_start_call_main","sourceReference":1000}},{"column":0,"id":1004,"instructionPointerReference":"0x7FFFF7A82E40","line":43,"moduleId":"7FFFF7A59000","name":"__libc_start_main_impl","presentationHint":"subtle","source":{"name":"@__libc_start_main@@GLIBC_2.34","sourceReference":1001}},{"column":0,"id":1005,"instructionPointerReference":"0x5555555550F5","line":15,"moduleId":"555555554000","name":"_start","presentationHint":"subtle","source":{"name":"@_start","sourceReference":1002}}]}}
[DEBUG codelldb::dap_codec] --> {"command":"stackTrace","arguments":{"threadId":2764684,"startFrame":4,"levels":19},"type":"request","seq":13}
[DEBUG codelldb::dap_codec] <-- {"seq":30,"type":"response","request_seq":13,"success":true,"command":"stackTrace","body":{"stackFrames":[]}}
[DEBUG codelldb::dap_codec] --> {"command":"scopes","arguments":{"frameId":1001},"type":"request","seq":14}
[DEBUG codelldb::dap_codec] <-- {"seq":31,"type":"response","request_seq":14,"success":true,"command":"scopes","body":{"scopes":[{"expensive":false,"name":"Local","variablesReference":1006},{"expensive":false,"name":"Static","variablesReference":1007},{"expensive":false,"name":"Global","variablesReference":1008},{"expensive":false,"name":"Registers","variablesReference":1009}]}}
[DEBUG codelldb::dap_codec] --> {"command":"variables","arguments":{"variablesReference":1006},"type":"request","seq":15}
[DEBUG codelldb::dap_codec] <-- {"seq":32,"type":"response","request_seq":15,"success":true,"command":"variables","body":{"variables":[{"evaluateName":"argc","memoryReference":"0x7FFFFFFFD658","name":"argc","type":"int","value":"2","variablesReference":0},{"evaluateName":"argv","memoryReference":"0x7FFFFFFFD778","name":"argv","presentationHint":{"attributes":["readOnly"]},"type":"char **","value":"{0x00007fffffffdb62}","variablesReference":1010}]}}

@vadimcn
Copy link
Owner

vadimcn commented Jan 26, 2025

When you specify command-line arguments as an "args": [ ] array, they are not processed by the shell. These strings are decoded as JSON strings and passed directly into the environment of the debuggee process being launched (although VSCode itself may perform some substitutions).
If you want your program to receive the argument "--pass-pipeline=builtin.module(convert-math-to-funcs{...", you can write it exactly like that. There’s no need to add extra quotes—the string will not be further split on whitespace.

Shell-like splitting using string-argv will occur only if you specify the command line as a single string, e.g., "args": "-a -b -c arg1 arg2".

@vadimcn vadimcn added the cause:Not a bug Everything works as intended, not a bug. label Jan 26, 2025
@vadimcn vadimcn closed this as not planned Won't fix, can't repro, duplicate, stale Jan 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cause:Not a bug Everything works as intended, not a bug.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants