Utiliser le Remote Debugger de Visual Studio

Pour continuer dans la veine des fonctionnalités de Visual Studio qui existent depuis un bon bout de temps, mais qui sont communément sous utilisées, je vais parler dans ce post du Remote Debugger.

Débugger en Local

Visual Studio comporte un débogueur qui permet de débugger un programme que l'on lance avec F5, ou "Debug / Start Debugging". Visual Studio va alors se placer dans un mode spécial qui permet d'effectuer du pas à pas dans le programme, utiliser des fonctionnalités telles que les BreakPoints, TracePoints, Watch, Intellitrace, faire des minidumps, et bien d'autres fonctionnalités.

Le Debugger lance donc le programme sur la machine locale, en utilisant les permissions de l'utilisateur loggé qui a lancé Visual Studio.

Rien de bien extraordinaire. Quoique que le Reverse Debugging avec IntelliTrace dans VS2010, ca vaut quand même bien son pesant d'or.

Spécifités Matérielles et CrapWare

Je ne sais pour vous, mais je tiens mon PC de développement aussi stable que possible. Je n'installe que très rarement de nouveaux logiciels afin de garder des performances relativement stable au cours du temps. Je vais d'ailleurs généralement installer de nouvelles version de logiciels uniquement après les avoir testées sur un autre PC pour déterminer leur comportement.

Traitez moi de maniaque autant que vous voulez, c'est assumé :)

Mais que faire lorsque l'on a besoin de tester un programme d'installation par exemple ? Ou bien que faire lorsque l'on a besoin de debugger des extensions de logiciels comme NI TestStand ou LabView ? Ou bien encore que faire lorsque le programme a besoin d'un matériel très spécifique qui ne peut pas être installé sur la machine de développement ? (Rainbow Keys, anyone ?)

Réponse : Le Remote Debugger ! Lorsque cela est possible, je vais tester et debugger mon logiciel dans une machine virtuelle, ou bien sur une machine physique qui comporte l'environnement nécessaire à l'exécution du programme.

De cette manière, mon environnement de développement reste stable, et je n'ai pas d'installations à faire qui pourraient venir m'installer du crapware et me manger le peu de mémoire vive qui me reste :)

Le Remote Debugger ?

L'idée est de continuer à utiliser sa machine de développement, la où les sources sont placées, et de se connecter via le réseau à la machine qui doit exécuter le programme. Ensuite, la session de debug distante est très similaire à une session locale, à l'exception que le "Edit and Continue" n'est pas supporté. Mais on peut généralement généralement s'en passer.

Lancer le debugging depuis Visual Studio

Il est possible de lancer directement l'exécutable sur la machine distante en utilisation l'option "Use Remote Machine" dans l'onglet "Debug" d'un projet C#. Il faut faire attention cependant que cocher cette case implique que les chemins précisés dans "Working Directory" deviennent ceux de la machine distante.

Il faut aussi prendre en compte que Visual Studio ne va pas copier les binaires et fichiers PDB sur la machine distante. C'est donc à vous de faire la copie des fichiers au bon endroit, en utilisant une "Post Build Action" un chemin UNC comme ceci "\\mymachine\c$\temp".

S'attacher à un processus en cours d'exécution

Il est aussi possible de s'attacher à un processus en cours d'exécution, en utilisant l'option "Debug / Attach To Process". Il suffit alors de changer le "Qualifier" et de mettre le nom du remote debugger distant, et de choisir le process à debugger.

Petite astuce ici : La case "Show processes from all users" n'est pas cochée par défaut. Cela veut dire que si vous tentez de débugger un service Windows, vous ne verrez pas le process tant que cette case ne sera pas cochée.

Notez aussi que cette fenêtre, "Attach To Process", fonctionne très bien pour les process locaux. C'est une fonctionnalité très pratique pour aller faire un dump mémoire d'un process qui prend trop de mémoire par exemple, à défaut d'utiliser windbg.

Installer le Remote Debugger

Le Remote Debugger est un composant additionnel de Visual Studio situé sur le média d'installation dans le répertoire "Remote Debugger". Il existe en trois version : x86, x64 et ia64. Si vous êtes amenés a débugger des programmes 32 bits sur une machine 64 bits, je vous conseille d'installer les deux versions x86 et x64. Vous aurez à choisir quel remote debugger lancer selon le type de Runtime .NET utilisé (32 bits ou 64 bits). Vous pourrez voir quel version utiliser avec la colonne "Type" dans la fenêtre "Attach To Process".

Enfin, voici les étapes à suivre :
  • Si vous utilisez VS2008 SP1, vous pouvez le télécharger ici, pour VS2010 utilisez l'installeur situé sur le DVD.
  • Une fois installé sur la machine distante, installez le service RDBG en utilisant le compte LocalSystem avec l'assistant.
  • Vous aurez peut-être un message à propos de la sécurité. Si vous l'avez, suivez ces étapes :
    • Ouvrez le panneau "Local Security Policy" dans le panneau de configuration "Administrative Tools"
    • Allez dans "Local Policies" / "Security Options"
    • Double clickez sur "Network access: Sharing and security model for local accounts" et mettez la valeur "Classic : Local users authenticate as themselves"
    • Fermez la fenêtre
  • Si votre machine distante n'est pas sur le même domaine que votre machine de développement, ou bien encore ne fait pas partie d'un domaine, ajoutez sur la machine distante un compte utilisateur local dont le nom est le même que votre nom d'utilisateur qui est loggé sur votre machine de développement, et placez le dans le groupe Administrateurs. Les mots de passe doivent également être les mêmes.
  • Démarrez le remote debugger sur la machine distante. Notez que si vous voulez débugger une application 32 bits sur la machine distante, vous aurez à lancer la version 32 Bits du remote debugger (msvsmon.exe)
  • Sur la machine de développement, ouvrez la fenêtre "Attach to process" et tapez le nom l'identifiant du remote debugger (affiché dans la fenêtre du remote debugger). Cela devrait ressembler à quelque chose comme administrator@my-machine.
Notez que le Firewall de la machine de développement comme celui de la machine distante peut-être un frein au bon fonctionnement du Remote Debugger. Vous pouvez le désactiver temporairement pour faciliter le débugger, mais pensez à le réactiver après. Si vous ne voulez activer que les ports nécessaire, le port 135/TCP est utilisé, puisque le Remote Debugger utiliser DCOM comme protocole de communication.

Et si mes BreakPoints reste des ronds rouge vides ?

C'est une situation assez commune, qui signifique que les fichiers pdb ne correspondent pas aux binaires chargés en mémoire. Vérifiez que vous copiez bien les pdb en meme temps que les dll.

La fenetre "Debug / Windows / Modules" permet de savoir si les symboles de debug ont bien été chargés, et si ce n'est pas le cas, la fenêtre "View / Output / Debug" va généralement donner la raison du problème de chargement.


Happy debugging !
Publié mardi 20 juillet 2010 22:55 par jay
Classé sous , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires


Les 10 derniers blogs postés

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01