如何在VS Code的Web调试会话中传递命令行参数

3

我需要在flutter/dart编程时,在VS Code中向调试会话传递参数。根据文档的说明,我已将以下数据添加到launch.json中。

{
  "configurations": {
    ..
    // Any custom environment variables to set when running the app with this
    // launch config.
    "env": {
      "DEBUG_MODE": true
    }

    // Arguments to be passed to the Dart or Flutter app.
    "args": [
        "--dart-define", 
        "DEBUG_VALUE=true",
    ],  
}

尝试读取该值:

void main(List<String> args) {
  final debugMode = String.fromEnvironment('DEBUG_MODE');
  final debugValue = String.fromEnvironment('DEBUG_VALUE');
  ...
}

但是变量为空,而且args列表也为空。请给我建议,我做错了什么?


@pskink “但是变量为空,参数列表也为空。” - BambinoUA
顺便说一下,您发布的链接是关于“toolArgs”,而不是“args”:"configurations": [ { "name": "Flutter", "request": "launch", "type": "dart", "toolArgs": [ "--dart-define", "MY_VAR=MY_VALUE", "--dart-define", "MY_OTHER_VAR=MY_OTHER_VALUE" ] } ] - pskink
使用 final debugMode = const String.fromEnvironment('DEBUG_MODE'); - pskink
不幸的是,这并没有帮助。 - BambinoUA
现在它可以工作了。我不明白它是怎么发生的。也许我在使用VS Code时遇到了问题。而且,为什么我们需要const修饰符确实有点奇怪。 - BambinoUA
显示剩余2条评论
2个回答

7

请确保在读取值时明确使用const。出于我并不完全理解的原因,这似乎仅在值为const时起作用:

在我的launch.json中添加如下内容:

"toolArgs": [
    "--dart-define",
    "FOO=bar",
]

并编写如下代码:

final foo1 = String.fromEnvironment('FOO');
final foo2 = const String.fromEnvironment('FOO');
print('FOO: "$foo1" "$foo2"');

输出结果为

flutter: FOO: "" "bar"

因此,如果在非const上下文中调用String.fromEnvironment,它似乎不会返回值。

编辑:实际上,在Web中,不使用 const 会导致异常。但是,如果使用 const ,它仍然按预期工作。


现在它能用了,但我不明白为什么。也许是我在VS Code中有问题“缓存”。是的,这很奇怪,我们为什么需要“const”修饰符。 - BambinoUA

0

正确版本是

{
    "version": "0.0.1",
    "configurations": [
        {
            "name": "Flutter",
            "request": "launch",
            "type": "dart",
            "program": "lib/main.dart",
            "args": [
                "--flavor",
                "dev",
                "--dart-define",
                "app.flavor=dev",
            ],
            "flutterMode": "debug"
        },
        {
            "name": "Flutter (profile)",
            "request": "launch",
            "type": "dart",
            "program": "lib/main.dart",
            "args": [
                "--flavor",
                "dev",
                "--dart-define",
                "app.flavor=dev",
            ],
            "flutterMode": "profile"
        },
        {
            "name": "Flutter (release)",
            "request": "launch",
            "type": "dart",
            "program": "lib/main.dart",
            "args": [
                "--flavor",
                "dev",
                "--dart-define",
                "app.flavor=dev",
            ],
            "flutterMode": "release"
        },
        {
            "name": "Flutter (dev)",
            "request": "launch",
            "type": "dart",
            "program": "lib/main.dart",
            "args": [
                "--flavor",
                "dev",
                "--dart-define",
                "app.flavor=dev",
            ],
            "flutterMode": "debug"
        },
        {
            "name": "Flutter (dev profile)",
            "request": "launch",
            "type": "dart",
            "program": "lib/main.dart",
            "args": [
                "--flavor",
                "dev",
                "--dart-define",
                "app.flavor=dev",
            ],
            "flutterMode": "profile"
        },
        {
            "name": "Flutter (dev release)",
            "request": "launch",
            "type": "dart",
            "program": "lib/main.dart",
            "args": [
                "--flavor",
                "dev",
                "--dart-define",
                "app.flavor=dev",
            ],
            "flutterMode": "release"
        },
        
    ]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接