我想调试一个应用程序,需要传递一个内嵌的json作为arg。
"configurations": [
{
"name": "app DEV",
"program": "lib/main.dart",
"request": "launch",
"type": "dart",
"args": [
"--dart-define=APP_BACKENDS={[{\"id\":\"default\",\"url\":\"https://localhost\",\"port\": \"8080\"},]}",
]
}
但是APP_BACKENDS常量值在第一个逗号中被删除。锁定它的打印:{[{"id":"default"
先说清楚,这就是我得到输出值的方法:
static const _APP_BACKENDS =
String.fromEnvironment('APP_BACKENDS', defaultValue: '{}');
4条答案
按热度按时间rsaldnfx1#
在浏览了大量的链接和阅读之后,最后我发现了一个GitHub问题https://github.com/microsoft/vscode/issues/98471,它解决了我的类似问题。如果你浏览链接并阅读倒数第二个评论,它解释了关于shell引用的事情。
**“参数扩展”:“none”**在将此添加到launch.json文件后,我能够运行代码,而无需添加其他答案中提到的额外\或空格。我尝试在vscode文档中搜索此配置,但没有找到任何引用,但它对我有效。
lb3vh1jj2#
我遇到了同样的问题--试图将json字符串作为命令行参数传递给python脚本。在shell中运行良好,但在launch.json中无法执行相同的操作。VS代码将逗号解释为多个参数,并将多个
-b
参数传递给我的程序(在我的情况下,是4个单独的-b
参数)。答案:在arg值的末尾添加一个空格““。
我不明白为什么这样做,但它确实有效。注意,我用单斜杠转义了双引号。
f1tvaqid3#
阅读本文档后:Launch JSON Reference,特别是这个引用,我知道,你需要使用
\\\
来实现你想要的。例如。在文档中只给出了这个启动程序时传递给程序的命令行参数的JSON数组。例如
["arg1", "arg2"]
。如果要转义字符,则需要对它们进行双转义。例如,["{\\\"arg1\\\": true}"]
将向应用程序发送{"arg1": true}
因此,看完这个之后,必须以正确的格式将JSON传递给args
这会做你的工作!
3b6akqbq4#
未来:
如果您通过shell(如
gdb
)使用调试器启动一些程序,请使用带单引号表示法:如果跳过单引号,gdb将从shell接收到类似下面的内容,用于重定向第一个和第二个参数:
{, "invalid: 123}
,这将导致EOF异常,因为"
没有结尾。如果使用单引号,gdb将收到:{"invalid: 123}
,它是具有开始和结束的适当独立参数。