Если вы хотите выполнить отладку с помощью VS Code, есть настройка, которую вы должны выполнить для каждого проекта, но после ее завершения все просто.
Установите gdb, если вы еще этого не сделали. Затем вам нужно выбрать конфигурацию на панели отладки. Инструкции можно найти здесь . Скомпилируйте вашу программу с -g
как минимум. Я предпочитаю также добавить в -O0
, чтобы минимизировать оптимизации.
Как только вы настроитесь, вы готовы к отладке с VS Code. Теперь, чтобы [надеюсь] ответить на ваши вопросы.
- GDB может сделать это для некоторых ошибок сегментации;Как правило, вы хотите научиться самостоятельно перемещаться по коду.
- Я попытался скомпилировать и запустить вашу программу, и она работала просто отлично. Имя вашего исполняемого файла main? Я скомпилировал на Debian, используя gcc 5.5. Я не назвал свой исполняемый файл, поэтому мой вызов выглядел так:
./a.out /home/sweenish/tmp
. Так как мой не подвел, я не могу предложить большую помощь здесь. Но ваш компилятор говорит, что файл не существует. Вы установили пакет build-essential? - Да, вы можете автоматизировать дополнительный аргумент, добавив опцию в файл launch.json для проекта VS Code.
Вот краткий пример:
#include <string>
#include <iostream>
int main(int argc, char* argv[])
{
std::string folder = argv[1];
std::cout << folder << '\n'; // Set a breakpoint here
}
Я добавил дополнительную строку кода в ваш пример. Установите точку останова, щелкнув слева от номера строки, появится красный кружок.
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build active file",
"command": "g++",
"args": [
"-Wall",
"-std=c++17",
"-g",
"-O0",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "/home/linuxbrew/.linuxbrew/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build"
}
]
}
Это слегка измененная автоматически созданная задача. Я добавил -Wall
, -std=c++17
и -O0
. Это файл tasks.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": "g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [
"/home/lorenzo/Images"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build active file",
"miDebuggerPath": "gdb"
}
]
}
Это автоматически сгенерированный launch.json. Обратите внимание, что я добавил аргумент пути. Отладчик всегда будет вызывать с этим аргументом, сохраняя при этом некоторую печать.
Затем я нажимаю кнопку «Воспроизвести» на панели отладки, когда мой файл C ++ активен, и он скомпилирует и запустит отладчик для меня. В консоли отладки команда: -exec print argv[1]
печатает путь к файлу, который я использую в качестве аргумента программы.