Настройка отладки 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++. Это особенно важно, если вы пишете свои библиотеки и хотите точно знать, что и как происходит в вашем коде.
Если эта статья вам помогла — ставьте лайк и подписывайтесь на мой канал.
Вопросы, предложения, или просто слова поддержки — пишите в комментариях!
ссылка на оригинал статьи https://habr.com/ru/articles/918878/
Добавить комментарий