web-dev-qa-db-fra.com

Débogage à distance mono à partir de Visual Studio

J'aimerais déboguer à distance une application console C # s'exécutant sous Linux à partir de Visual Studio. Voici ce que j'ai trouvé jusqu'à présent:

http://www.mono-project.com/Debugger

Le moteur d’exécution Mono implémente une interface de débogage qui autorise débogueurs et IDE pour déboguer le code managé. Cela s'appelle le Soft Debugger et est pris en charge par MonoDevelop, Xamarin Studio et Visual Studio (lorsque les plugins appropriés sont installés) ainsi que le client SDB en ligne de commande.

Mono fournit une API pour communiquer avec le débogueur et créer votre fichier propres interfaces de débogage via l’assemblage Mono.Debugger.Soft.dll.

La page ci-dessous aborde quelques problèmes liés à l’implémentation actuelle du débogueur MonoVS, mais ils me conviennent tous.

http://mono-project.com/Visual_Studio_Integration

La page contient également des liens vers le guide de démarrage pour MonoVS:

http://mono-project.com/GettingStartedWithMonoVS

Qui contient un lien de téléchargement pour MonoTools:

http://mono-tools.com/download/

Cependant, le lien de téléchargement redirige maintenant vers:

http://xamarin.com/download/

Où on me propose de télécharger Xamarin Studio Starter Edition. En cliquant sur le lien Tarification, je constate que j'ai besoin d'au moins l'édition Business pour le support Visual Studio, à 999 dollars par an. Eh bien non merci.

C'est là que je suis coincé. Quelques spécificités de mon environnement:

Environnement de développement:

  • Windows 7 64 bits
  • Visual Studio Pro 2013 (peut utiliser 2010 si cela fonctionne mieux)

Environnement cible:

  • Tarte aux framboises
  • Raspbian Wheezy
  • Mono 3.2.8
  • Exécution d'une application console via SSH
29
Anlo

Je sais que c'est un vieux fil de discussion, mais au cas où quelqu'un (comme moi) n'aurait pas encore trouvé de solution, en cherchant aujourd'hui, j'ai trouvé cette extension Visual Studio 2015 qui fonctionne à merveille: MonoRemoteDebugger for Visual Studio 2015

Voir MonoRemoteDebugger v1.0.4 pour résoudre le conflit avec l'extension Xamarin VS sur VS2015 update2.

J'espère que ça aide.

Bon débogage et merci au développeur! :)

17
Gutemberg Ribeiro

J'ai trouvé ce guide expliquant comment effectuer un débogage à distance sous Linux, sous Windows, en utilisant Xamarin Studio, qui est maintenant gratuit, sauf pour le développement iOS et Android. Je l'ai développée avec des corrections pour les problèmes rencontrés lors du test sur un Raspberry Pi Zero W exécutant Raspbian Jessie Lite (2017-04-10).

  1. Téléchargez et installez Xamarin Studio , GTK # pour .NET et .NET Framework 4.6.2 . Xamarin Studio nécessite .NET 4.5 mais GTK # requiert .NET 4.6. J'ai utilisé Xamarin Studio version 6.1.2 (version 44) et GTK # version 2.12.44.
  2. J'ai installé Xamarin Studio sur une machine virtuelle différente de la machine VS2015; j'ai donc dû télécharger et installer MSBuild Tools 2013 et MSBuild Tools 2015 .
  3. Créez une variable d'environnement MONODEVELOP_SDB_TEST = 1 (Poste de travail -> Propriétés -> Paramètres système avancés -> Variables d'environnement).
  4. Lancez Xamarin Studio. Si aucune fenêtre ne s'affiche, consultez les fichiers journaux dans le dossier %localappdata%\XamarinStudio-6.0\Logs pour voir ce qui a échoué.
  5. J'ai créé une application console .NET 4.6 dans Visual Studio 2015 et ajouté le package NuGet Mono.Unofficial.pdb2mdb. J'ai utilisé la version 4.2.3.4. Le package Mono.pdb2mdb version 0.1.0.20130128 ne semble pas fonctionner avec les assemblys construits par VS2015 (PdbDebugException: Unknown custom metadata item kind: 6).
  6. Chargez le fichier .sln ou .csproj à partir de Visual Studio dans Xamarin Studio. Générez la solution et utilisez l’outil pdb2mdb du dossier des packages NuGet pour créer un fichier .mdb: pdb2mdb MyProgram.exe
  7. J'ai utilisé WinSCP pour copier MyProgram.exe et MyProgram.exe.mdb sur mon Raspberry Pi.
  8. Je me suis connecté avec PuTTY en utilisant SSH et ai installé la version 3.2.8 de Mono sur le Pi: Sudo apt-get install mono-complete.
  9. Démarrez le runtime Mono avec les indicateurs de débogueur: mono --debug --debugger-agent=transport=dt_socket,address=0.0.0.0:12345,server=y /path/to/MyProgram.exe. Cela démarrera le programme mais interrompra l'exécution jusqu'à la connexion du débogueur Xamarin Studio.
  10. Définissez un point d'arrêt dans Xamarin Studio, sélectionnez l'élément de menu Run -> Run with -> Custom Configuration... et sélectionnez Run Action = Debug - Custom Command Mono Soft Debugger. Cliquez sur Debug.
  11. Remplissez les champs IP et Port avec l'adresse IP de votre système linux et le port 12345, comme indiqué dans la ligne de commande Mono. Cliquez sur Connect et l'exécution commencera en s'arrêtant au point d'arrêt défini.

 Screenshot of Xamarin Studio Debugging

Il est possible de définir des points d'arrêt conditionnels, d'entrer et de sortir du code, de surveiller des primitives, des objets, etc., et c'est également assez rapide. Je préfère déboguer directement à partir de Visual Studio, mais cela semble être une solution pleinement opérationnelle.

3
Anlo

En me basant sur la réponse de Gutemberg Ribeiro , j'ai réussi à obtenir MonoRemoteDebugger en travaillant avec VS2015 sur un Raspberry Pi Zero W exécutant Raspbian Jessie Lite (2017-04-10). L'astuce consistait à installer une version Mono ultérieure à la version 3.2.8:

  1. Installez l’extension MonoRemoteDebugger Visual Studio, j’ai utilisé la version 1.2.0.
  2. Créez une application console .NET 4.6 dans Visual Studio.
  3. Si une ancienne version Mono a été installée sur le Raspberry Pi, supprimez-la à l’aide des commandes suivantes:

    Sudo apt-get purge mono-complete

    Sudo apt-get autoremove

  4. Installez Mono version 4.0.2:

    Sudo apt-key adv --keyserver hkp: //keyserver.ubuntu.com: 80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

    echo "deb http://plugwash.raspbian.org/mono4 jessie-mono4 main" | Sudo tee -a /etc/apt/sources.list

    Sudo apt-get update

    Sudo apt-get install mono-complete

  5. Installez le serveur MonoRemoteDebugger:

    wget https://github.com/techl/MonoRemoteDebugger/releases/download/v1.2.0/MonoRemoteDebugger.Server.Zip

    unzip -d MonoRemoteDebugger.Server MonoRemoteDebugger.Server.Zip

  6. Démarrez le serveur MonoRemoteDebugger:

    mono MonoRemoteDebugger.Server/MonoRemoteDebugger.Server.exe

  7. Définissez un point d'arrêt dans Visual Studio et sélectionnez l'élément de menu MonoRemoteDebugger -> Debug with Mono (remote) dans Visual Studio.
  8. Définissez Remote-IP sur l'adresse IP du Raspberry Pi et cliquez sur Connecter. MonoRemoteDebugger va compiler et transférer le programme sur Raspberry Pi. Nul besoin d’exécuter manuellement pdb2mdb, le fichier .mdb sera créé par le serveur MonoRemoreDebugger.

 Screenshot

Pour être honnête, les capacités de débogage sont assez limitées. Les points d'arrêt simples et les codes d'entrée/sortie/sortie semblent fonctionner assez bien. Définir un point d'arrêt dans une fonction, puis passer au-dessus de cet appel de fonction ne s'arrêtera pas au point d'arrêt.

Les types primitifs peuvent être regardés, mais les objets que j'ai essayé de regarder ne peuvent pas être affichés. La vue Call Stack est assez limitée et la vue Threads est vide. Les exceptions ne sont pas interceptées, mais le message "[ERREUR] FATAL UNHANDLED EXCEPTION" est envoyé par MonoRemoteDebuggerServer. Mais si vous pouvez vivre avec ces limitations, la configuration est plus simple que la route Xamarin Studio .

0
Anlo

Il y a un plugin pour Xamarin Studio/MonoDevelop

https://github.com/logicethos/SSHDebugger

0
FlappySocks

La solution dont vous avez besoin arrive cette année avec MonoDebugger.NET . Le ou les développeurs "promettent" que nous pouvons déployer sur n'importe quel appareil Mono et le déboguer dans Visual Studio (2010 à 2015).

0
dayanruben