Настройка отладки C++ проекта через GDB в VSCode
Если вы работаете над собственными библиотеками на C++, особенно такими, где важна строгая типизация и предсказуемое поведение компилятора, то наверняка сталкивались с ситуацией, когда Microsoft Visual Studio (MSVS) сама "подчищает" за вами типы или подключает лишние зависимости. Иногда это удобно, но при разработке низкоуровневого кода это может мешать.
В этой статье я расскажу, как перейти с MSVC на MinGW, правильно настроить CMake и использовать GDB для отладки вашего C++-проекта прямо в Visual Studio Code.
Почему стоит выбрать MinGW?
Раньше я использовал MSVC, потому что он шёл "из коробки" с Windows и Visual Studio. Но со временем понял, что он слишком много делает за меня: автоматически приводит типы, подключает стандартные библиотеки, иногда даже не даёт увидеть настоящее поведение программы.
После этого решил попробовать MinGW — порт GCC для Windows. Он оказался отличной заменой:
Работает по принципам GNU Toolchain;
Позволяет писать кроссплатформенный код;
Не лезет в код сам — всё остаётся под вашим контролем;
Поддерживает GDB — мощный отладчик, который можно использовать внутри VSCode.
Именно возможность использовать GDB стала ключевым фактором при переходе с MSVC на MinGW во время разработки своей библиотеки ModernStringС++
( Github ).
Шаг 1: Настройка CMake под MinGW
До этого я собирал проект так:
cd build
cmake ..
cmake --build . --config Release
Это работало, но всегда использовалось окружение (компилятор) MSVC. Чтобы перейти на MinGW, нужно немного изменить команду:
cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug
cmake --build . --config Debug
Что здесь происходит:
-B build
указывает, что файлы сборки будут генерироваться в директорииbuild
;-G "MinGW Makefiles"
говорит CMake, что мы хотим использовать именно MinGW;-DCMAKE_BUILD_TYPE=Debug
включает режим отладки, чтобы GDB мог нормально работать.
Если вы хотите собрать релизную версию, просто замените
Debug
наRelease
.
Шаг 2: Сборка проекта
После того как CMake сгенерировал нужные файлы, можно запускать сборку:
cmake --build build --config Debug
Если вы используете Release-сборку, не забудьте указать его явно:
cmake --build build --config Release
Шаг 3: Включаем GDB в VSCode
Теперь, когда проект собран с флагами отладки, пора подключить GDB. Для этого мне потребовались:
Установленный MinGW-w64 (или MSYS2);
GDB, который идёт в составе MinGW;
Расширение C/C++ в Visual Studio Code.
Конфигурация .vscode/launch.json
Добавьте в свой launch.json
следующий блок:
{
"name": "(gdb) Запустить",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/ModernString.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/build",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe" // Путь до дебагерра
}
⚠️ Обязательно проверьте путь к
gdb.exe
. У вас он может быть другим, в зависимости от установленного дистрибутива. Ищите через win + S (Не всегда помогает). Я лично использую программу Everything
Эта конфигурация:
Использует GDB как движок отладки;
Запускает программу из папки
build
;Не открывает внешний терминал (всё работает внутри VSCode);
Показывает значения переменных, точки останова, стек вызовов и прочие полезности.
Что получается в результате?
После всех этих шагов вы получаете комфортную среду разработки:
Полный контроль над процессом компиляции;
Возможность полноценной отладки через GDB;
Современные возможности C++;
Чистую структуру проекта благодаря CMake.
Несколько советов на заметку
Чтобы убедиться, что GDB установлен, просто выполните в терминале:
gdb --version
Проверьте, добавлен ли
mingw32-make
в системные переменные окружения PATH.Если возникают ошибки при сборке — сравните версии CMake и MinGW, они должны быть совместимыми.
Для автоматизации сборки и запуска можно использовать файл
tasks.json
в папке.vscode
.
Где почитать больше
Заключение
Переход с MSVC на MinGW дал мне больше контроля над проектом и позволил использовать GDB — один из самых мощных отладчиков для C++. Это особенно важно, если вы пишете свои библиотеки и хотите точно знать, что и как происходит в вашем коде.
Если эта статья вам помогла — ставьте лайк и подписывайтесь на мой канал.
Вопросы, предложения, или просто слова поддержки — пишите в комментариях!