Pour développer efficacement en C++ avec Visual Studio Code, il est nécessaire de configurer trois fichiers JSON principaux situés dans le répertoire caché .vscode. Ces fichiers orchestrent l'analyse statique du code, la génération de l'exécutable et le processus de débogage.
- Paramétrage de l'analyse statique : c_cpp_properties.json
Ce fichier indique à l'extension C/C++ l'emplacement des en-têtes, les définitions de préprocesseur et le compilateur à utiliser pour l'IntelliSense. Pour le générer, ouvrez la palette de commandes (Ctrl+Shift+P), tapez "C/C++: Edit Configurations (JSON)" et sélectionnez l'option correspondante.
Voici un exemple de configuration adaptée pour un environnement basé sur Clang avec le standard C++17 :
{
"configurations": [
{
"name": "Mac-Clang",
"includePath": [
"${workspaceFolder}/include/**",
"/usr/local/include/**"
],
"defines": [
"NDEBUG",
"APP_VERSION=\"1.0.0\""
],
"macFrameworkPath": [
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
],
"compilerPath": "/usr/bin/clang++",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "macos-clang-x64"
}
],
"version": 4
}
- Automatisation de la compilation : tasks.json
Le fichier de tâches définit comment l'éditeur doit invoquer le compilateur. Vous pouvez le créer via la palette de commandes en cherchant "Tasks: Configure Default Build Task", puis en choisissant un modèle de base.
L'exemple ci-dessous illustre une tâche de compilasion utilisant g++ avec des avertissements stricts et une sortie redirigée vers un dossier spécifique :
{
"version": "2.0.0",
"tasks": [
{
"label": "Build Application",
"type": "shell",
"command": "g++",
"args": [
"-Wall",
"-Wextra",
"-g",
"-std=c++17",
"${workspaceFolder}/src/*.cpp",
"-o",
"${workspaceFolder}/build/app_debug"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"],
"detail": "Tâche générée pour compiler le code source."
}
]
}
Notez l'utilisation du drapeau -g, absolument indispensable pour injecter les symboles de débogage dans le binaire final afin de permettre l'inspection des variables.
- Configuration du débogueur : launch.json
Pour interagir avec GDB ou LLDB directement depuis l'interface, un fichier de lancmeent est requis. Accédez au panneau "Exécuter et déboguer" et créez un nouveau fichier launch.json en sélectionnant l'environnement C++.
L'exemple suivant montre comment lier le débogueur au binaire compilé précédemment :
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Main Executable",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/app_debug",
"args": ["--verbose", "--config=dev.ini"],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [
{ "name": "ENV_TYPE", "value": "DEVELOPMENT" }
],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"preLaunchTask": "Build Application",
"setupCommands": [
{
"description": "Activer l'affichage formaté pour GDB",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
]
}
]
}
L'attribut preLaunchTask assure que la compilation est systémtaiquement exécutée avant le lancement de la session de débogage, garantissant ainsi que les points d'arrêt correspondent toujours à la version la plus récente du code source.