Déployer, exécuter et déboguer votre projet Linux MSBuild
La prise en charge Linux est disponible dans Visual Studio 2017 et ultérieur. Pour afficher la documentation de ces versions, définissez la liste déroulante Version située au-dessus de la table des matières sur Visual Studio 2017 ou Visual Studio 2019.
Une fois que vous avez créé un projet Linux C++ basé sur MSBuild dans Visual Studio et que vous vous y êtes connecté par le biais du Gestionnaire de connexions Linux, vous pouvez l’exécuter et le déboguer. Vous compilez, exécutez et déboguez le code sur la cible distante.
Visual Studio 2019 version 16.1 et versions ultérieures : vous pouvez cibler différents systèmes Linux pour le débogage et la génération. Par exemple, vous pouvez utiliser la compilation croisée sur x64 et déployer sur un appareil ARM lors du ciblage de scénarios IoT. Pour plus d’informations, consultez Spécifier des machines différentes pour effectuer le build et déboguer plus loin dans cet article.
Il existe plusieurs façons de manipuler et déboguer votre projet Linux.
Vous pouvez utiliser les fonctionnalités de débogage standard de Visual Studio, comme les points d’arrêt, les fenêtres Espion et le pointage sur une variable. Ces méthodes vous permettent de déboguer votre projet comme vous le faites habituellement pour d’autres types de projets.
Affichez la sortie de l’ordinateur cible dans la fenêtre de console Linux. Vous pouvez également utiliser la console pour envoyer les entrées à l’ordinateur cible.
Déboguer votre projet Linux
Sélectionnez le mode de débogage dans la page de propriétés Débogage.
GDB est utilisé pour déboguer les applications exécutées sur Linux. Lors du débogage sur un système distant (pas WSL), GDB peut s’exécuter dans deux modes différents, que vous pouvez sélectionner à partir de l’option Mode de débogage dans la page de propriétés Débogage du projet :
GDB est utilisé pour déboguer les applications exécutées sur Linux. GDB peut s’exécuter dans deux modes différents, que vous pouvez sélectionner à partir de l’option Mode de débogage dans la page de propriétés Débogage du projet :
En mode gdbserver, GDB s’exécute localement et se connecte à gdbserver sur le système distant.
En mode gdb, le débogueur Visual Studio exécute GDB sur le système distant. C’est la meilleure option si la version locale de GDB n’est pas compatible avec la version installée sur la machine cible. Il s’agit du seul mode que la fenêtre Console Linux prend en charge.
Notes
Si vous ne pouvez pas atteindre les points d’arrêt en mode de débogage gdbserver, essayez le mode gdb. Vous devez d’abord installer gdb sur la cible distante.
Sélectionnez la cible distante dans la barre d’outils Déboguer standard de Visual Studio.
Quand la cible distante est disponible, elle est répertoriée par son nom ou son adresse IP.
Si vous n’êtes pas encore connecté à la cible distante, vous voyez une instruction vous demandant d’utiliser le Gestionnaire de connexions Linux pour vous connecter à la cible distante.
Définissez un point d’arrêt en cliquant dans la marge gauche d’une section de code qui s’exécute correctement.
Un point rouge s’affiche sur la ligne de code où vous avez défini le point d’arrêt.
Appuyez sur F5 (ou Déboguer > Démarrer le débogage) pour démarrer le débogage.
Quand vous démarrez le débogage, l’application est compilée sur la cible distante avant de démarrer. Les erreurs de compilation éventuelles s’affichent dans la fenêtre Liste d’erreurs.
S’il n’y a aucune erreur, l’application démarre et le débogueur s’interrompt au point d’arrêt.
Maintenant, vous pouvez interagir avec l’application dans son état actuel, afficher les variables et exécuter le code pas à pas en appuyant sur des touches de commande (par exemple, F10 ou F11).
Si vous souhaitez utiliser la console Linux pour interagir avec votre application, sélectionnez Déboguer > Console Linux.
Cette console affiche toutes les sorties de console de l’ordinateur cible et prend les entrées pour les envoyer à l’ordinateur cible.
Configurer d’autres options de débogage (projets MSBuild)
Vous pouvez passer les arguments de ligne de commande à l’exécutable en utilisant l’élément Arguments de programme dans la page de propriétés Débogage du projet.
Vous pouvez exporter la variable d’environnement
DISPLAY
à l’aide de la Commande de pré-lancement dans les pages de propriétés de Débogage du projet. Par exemple :export DISPLAY=:0.0
Vous pouvez passer des options de débogueur spécifiques à GDB à l’aide de l’entrée Commandes de débogueur supplémentaires. Par exemple, il est conseillé d’ignorer les signaux d’instruction non conforme (SIGILL). Vous pouvez utiliser la commande handle pour le faire en ajoutant ce qui suit à l’entrée Commandes de débogueur supplémentaires comme indiqué ci-dessus :
handle SIGILL nostop noprint
Vous pouvez spécifier le chemin d’accès à la base de données GDB utilisée par Visual Studio à l’aide de l’élément Chemin d’accès GDB dans la page de propriétés Débogage du projet. Cette propriété est disponible dans Visual Studio 2019 version 16.9 et versions ultérieures.
Déboguer avec Attacher au processus
La page de propriétés Débogage pour les projets Visual Studio et les paramètres Launch.vs.json pour les projets CMake ont des paramètres qui vous permettent d’effectuer un attachement à un processus en cours d’exécution. Si vous avez besoin d’un contrôle supplémentaire au-delà de ce que fournissent ces paramètres, vous pouvez placer un fichier nommé Microsoft.MIEngine.Options.xml
à la racine de votre solution ou espace de travail. Voici un exemple simple :
<?xml version="1.0" encoding="utf-8"?>
<SupplementalLaunchOptions>
<AttachOptions>
<AttachOptionsForConnection AdditionalSOLibSearchPath="/home/user/solibs">
<ServerOptions MIDebuggerPath="C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\Common7\IDE\VC\Linux\bin\gdb\7.9\x86_64-linux-gnu-gdb.exe"
ExePath="C:\temp\ConsoleApplication17\ConsoleApplication17\bin\x64\Debug\ConsoleApplication17.out"/>
<SetupCommands>
<Command IgnoreFailures="true">-enable-pretty-printing</Command>
</SetupCommands>
</AttachOptionsForConnection>
</AttachOptions>
</SupplementalLaunchOptions>
AttachOptionsForConnection contient une grande partie des attributs dont vous pouvez avoir besoin. L’exemple ci-dessus montre comment spécifier un emplacement pour rechercher des bibliothèques .so supplémentaires. L’élément enfant ServerOptions permet d’effectuer un attachement au processus distant avec gdbserver à la place. Pour ce faire, vous devez spécifier un client gdb local (celui fourni dans Visual Studio 2017 est indiqué ci-dessus) et une copie locale du binaire contenant les symboles. L’élément SetupCommands permet de transmettre des commandes directement à gdb. Vous pouvez trouver toutes les options disponibles dans le schéma LaunchOptions.xsd sur GitHub.
Spécifier différentes machines pour la génération et le débogage dans les projets Linux basés sur MSBuild
Vous pouvez séparer votre machine de build distante de votre machine de débogage distante pour les projets Linux basés sur MSBuild et les projets CMake qui ciblent une machine Linux distante. Par exemple, vous pouvez maintenant utiliser la compilation croisée sur x64 et déployer sur un appareil ARM lors du ciblage de scénarios IoT.
Par défaut, la machine de débogage distante est identique à celle de build distante (Propriétés de configuration>Général>Machine de build distante). Pour spécifier une nouvelle machine de débogage à distance, cliquez sur le projet dans l’Explorateur de solutions et accédez à Propriétés de configuration>Débogage>Machine de débogage distante.
Le menu déroulant pour Machine de débogage distante est renseigné avec toutes les connexions à distance établies. Pour ajouter une nouvelle connexion à distance, accédez à Outils>Options>Multiplateforme>Gestionnaire de connexions ou recherchez « Gestionnaire de connexions » dans Lancement rapide. Vous pouvez également spécifier un nouveau répertoire de déploiement distant dans les pages de propriétés du projet (Propriétés de configuration>Général>Répertoire de déploiement distant).
Par défaut, seuls les fichiers nécessaires pour le processus à déboguer sont déployés sur la machine de débogage distante. Vous pouvez utiliser l’Explorateur de solutions pour configurer les fichiers source qui seront déployés sur la machine de débogage distante. Lorsque vous cliquez sur un fichier source, vous voyez un aperçu de ses propriétés de fichier directement en dessous de l’Explorateur de solutions.
La propriété Contenu spécifie si le fichier doit être déployé sur la machine de débogage distante. Vous pouvez désactiver le déploiement entièrement en accédant à Pages de propriétés>Gestionnaire de configuration puis en décochant Déployer pour la configuration souhaitée.
Dans certains cas, vous pourriez avoir besoin de davantage de contrôle sur le déploiement de votre projet. Par exemple, si certains fichiers que vous souhaitez déployer peuvent se trouver en dehors de votre solution ou si vous souhaitez personnaliser votre répertoire de déploiement distant par fichier ou répertoire. Dans ce cas, ajoutez le ou les blocs de code suivants à votre fichier .vcxproj et remplacez « example.cpp » par les noms des fichiers que vous souhaitez utiliser :
<ItemGroup>
<RemoteDeploy Include="__example.cpp">
<!-- This is the source Linux machine, can be empty if DeploymentType is LocalRemote -->
<SourceMachine>$(RemoteTarget)</SourceMachine>
<TargetMachine>$(RemoteDebuggingTarget)</TargetMachine>
<SourcePath>~/example.cpp</SourcePath>
<TargetPath>~/example.cpp</TargetPath>
<!-- DeploymentType can be LocalRemote, in which case SourceMachine will be empty and SourcePath is a local file on Windows -->
<DeploymentType>RemoteRemote</DeploymentType>
<!-- Indicates whether the deployment contains executables -->
<Executable>true</Executable>
</RemoteDeploy>
</ItemGroup>
Projets CMake
Pour les projets CMake qui ciblent une machine Linux distante, vous pouvez spécifier une nouvelle machine de débogage distante dans launch.vs.json. Par défaut, la valeur de « remoteMachineName » est synchronisée avec la propriété « remoteMachineName » dans CMakeSettings.json, qui correspond à votre machine de build distante. Ces propriétés n’ont plus besoin de correspondre, et la valeur de « remoteMachineName » dans launch.vs.json détermine la machine distante utilisée pour le déploiement et le débogage.
IntelliSense propose une liste de toutes les connexions à distance établies. Vous pouvez ajouter une nouvelle connexion à distance, accédez à Outils>Options>Multiplateforme>Gestionnaire de connexions ou recherchez « Gestionnaire de connexions » dans Lancement rapide.
Si vous souhaitez avoir le contrôle total sur votre déploiement, vous pouvez ajouter le ou les blocs de code suivants au fichier launch.vs.json. N’oubliez pas de remplacer les valeurs d’espace réservé par de vraies valeurs :
"disableDeploy": false,
"deployDirectory": "~\foo",
"deploy" : [
{
"sourceMachine": "127.0.0.1 (username=example1, port=22, authentication=Password)",
"targetMachine": "192.0.0.1 (username=example2, port=22, authentication=Password)",
"sourcePath": "~/example.cpp",
"targetPath": "~/example.cpp",
"executable": "false"
}
]
Étapes suivantes
- Pour déboguer les appareils ARM sur Linux, consultez ce billet de blog : Debugging an embedded ARM device in Visual Studio.