VSCode C проблема: отладка и сборка C на Windows - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь настроить VSCode для сборки и отладки C на Windows. Я установил MinGW.

Я пытаюсь создать EXE-файл для следующего кода:

#define USE_PTS             true
#include "Cartography.h"

static Cartography cartography ;
static int nCartography = 0;

int main(void)
{
    nCartography = loadCartography("map (1).txt", &cartography);
    showCartography(cartography, nCartography);
    interpreter(cartography, nCartography);
    return 0;
}

У меня есть два других файла Cartography.h и Cartography.c. Если я запустил следующую команду с помощью терминала PowerShell, он отлично сгенерирует файл .exe:

gcc -std=c11 -o Main Cartography.c Main.c -lm

Но если я попытаюсь создать его с помощью VSCode (используя Ctrl + Shift + B ) он не распознает другие файлы:

> Executing task in folder Projeto2LAP: gcc -std=c11 -o Main Cartography.c Main.c -lm <


gcc.exe: error: Cartography.c: No such file or directory
gcc.exe: error: Main.c: No such file or directory
The terminal process terminated with exit code: 1

Terminal will be reused by tasks, press any key to close it.

Вот мой tasks.json файл:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: gcc.exe build active file",
            "command": "gcc -std=c11 -o Main Cartography.c Main.c -lm",
            "options": {
                "cwd": "C:\\Program Files (x86)\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

Другая проблема, с которой я сталкиваюсь, - это когда я пытаюсь использовать встроенный отладчик VSCode. Я создаю файл .exe с помощью упомянутой команды, поэтому в текущей папке присутствует файл .exe.

(я также должен упомянуть, что папка, над которой я работаю, содержит только файлы и файлы. vscode, в ней нет вложенных папок или чего-либо, что могло бы вызвать ошибку).

Когда я нажимаю на отладку, появляется следующее сообщение об ошибке:

Подсказка сообщения об ошибке

Вот мой launch.json файл:

{
    // 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": [

        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/Main.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Ваш первый вопрос:
Когда вы используете команду powershell, она получает *.c файлы из вашего текущего каталога формулировок по относительным путям. Это то, что вы пытаетесь сделать в команде task, но ваш CWD установлен не в то место. В tasks.json вам нужно либо указать абсолютные пути ваших файлов в команде gcc, либо изменить свой CWD на каталог файлов *.c. Или лучше, VS C позволяет вам установить "cwd": "${workspaceFolder}". Это означает, что если вы измените имя или внесете какие-либо другие правки, ваша задача по-прежнему будет работать. (Для получения бонусных баллов вы можете установить CWD в папку, в которой находится текущий выбранный файл.) Первый вопрос, часть 2: ошибка задачи, вероятно, не ваша. Похоже, это известная ошибка. Инструкции здесь , чтобы смягчить его.

Извините за поздний ответ
Я не вижу причин, по которым вы могли бы получить ошибку отладки, поэтому мой единственный догадываюсь, это проблема с разрешениями. Ваш отладчик может не «видеть», что этот каталог существует. Убедитесь, что ни он, ни его родительские папки не имеют чрезмерно жестких ограничений.

0 голосов
/ 11 мая 2020

Вместо того, чтобы передавать одну длинную строку для запуска G CC в задачах. json, рассмотрите возможность использования переменной списка «args», помещая каждый аргумент в отдельный элемент списка.

Предполагая, что ваш исходные файлы находятся в том же каталоге, который был открыт в VSCode, ранее упомянутый макрос «$ {workspaceFolder}» построит правильные пути.

В противном случае укажите абсолютные пути к исходным файлам, как предлагалось ранее.

Пример:

{
    "label": "GCC Build Debug (64-bit)",
    "type": "shell",
    "command": "C:\\Program Files (x86)\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\gcc",
    "args": [
        "--std=c11",
        "-g",
        "-lm",
        "-o",
        "${workspaceFolder}/Main"
        "${workspaceFolder}/Main.c",
        "${workspaceFolder}/Cartography.c"
    ],
    "problemMatcher": [
        "$msCompile"
    ]
},
...