Получение случайных аргументов командной строки при компиляции и отладке в коде Visual Studio - PullRequest
1 голос
/ 11 апреля 2020

Итак, я делаю пример программы, чтобы научиться создавать и отлаживать C проекты в коде Visual Studio. Для справки, вот мои launch.json и tasks.json для проекта:

запуск. json:

"version": "0.2.0",
"configurations": [
    {
        "name": "test-project",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}\\test.exe",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ],
        "preLaunchTask": "build test-project"
    }
]

задач. json:

"version": "2.0.0",
"tasks": [
    {
        "label": "build test-project",
        "type": "shell",
        "command": "gcc",
        "args": [
            "-std=c99",
            "-g",
            "${workspaceFolder}\\test.c",
            "-o",
            "${workspaceRoot}\\test.exe"              
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
]

А вот и 'тест. c':

тест. c

#include <stdio.h>

int main(int argc, char* argv[]){


    int t = 9;
    int p = 10;
    return 0;
}

Вот что я вижу для своих аргументов командной строки, даже если я не дал аргументов командной строки:

enter image description here

Оказывается, 3 дополнительные команды Строковые аргументы "2>CON", "1>CON" и "<CON", как вы можете видеть на панели часов. Почему это происходит, хотя я дал 0 аргументов командной строки?

1 Ответ

0 голосов
/ 12 апреля 2020

После некоторого поиска и тестирования в коде Visual Studio я обнаружил параметр "externalConsole" внутри launch.json, который перенаправляет вывод в фактическое окно командной строки, удаляя дополнительные перенаправления из командной строки. Есть также еще одна опция, которая называется "avoidWindowsConsoleRedirection", которая позволяет избежать добавления дополнительных аргументов / перенаправлений командной строки без отображения внешней командной строки. Если оба параметра присутствуют в вашем файле launch.json, приоритет имеет "externalConsole". Пример использования обоих ниже:

"version": "0.2.0",
"configurations": [
    {
        "name": "test-project",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}\\test.exe",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": true,
        "avoidWindowsConsoleRedirection": true,
        "MIMode": "gdb",
        "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ],
        "preLaunchTask": "build test-project"

    }
]
...