J'ai un programme .NET qui ne peut pas être exécuté à partir de Visual Studio pour certaines raisons (fichier Excel créé à partir d'un projet de modèle Excel 2010) pour lequel j'ai besoin de déboguer les événements de démarrage.
Si je veux déboguer les événements qui surviennent après l'initialisation du programme, il n'y a pas de problème. J'exécute le programme à partir de l'explorateur, attache le processus à Visual Studio et ajoute des points d'arrêt dans le code. Mais ici, j'ai besoin de mettre des points d'arrêt sur les événements de démarrage. Je dois être capable d'attacher des processus à Visual Studio, non pas en fonction d'un PID, mais d'un nom de processus spécifique ou de toute autre solution qui fonctionnerait.
Bien sûr, ajouter un Thread.Sleep(1000)
événement dans mes événements de démarrage pour me donner un peu de temps pour attacher le processus dans Visual Studio est hors de question!
la source
Je déboguais un plugin C ++ dans un processus généré en externe qui s'est écrasé en lançant une exception au démarrage et cela a parfaitement fonctionné pour moi:
Ajoutez l' extension gratuite Reattach pour Visual Studio . Demandez-lui de se rattacher au nom du processus avant de le lancer. Il fera apparaître une boîte de dialogue modale indiquant qu'il attend le lancement du nom du processus.
Maintenant, lancez le processus et le débogueur Visual Studio s'attachera immédiatement, intercepter les exceptions et atteindre les points d'arrêt.
la source
Suivez ces étapes si vous disposez de Visual Studio 2017-2019:
Beaucoup plus facile que d'autres suggestions: vous n'avez pas à vous soucier des propriétés du projet et aucune extension n'est nécessaire.
la source
J'ai trouvé cette réponse lorsque je cherchais quelque chose de similaire. Dans mon cas, je ne pouvais pas simplement utiliser l'exécutable comme programme de démarrage de mon projet car il devait être démarré dans un environnement très spécifique que je ne pouvais pas reproduire facilement (nommément: démarré de cygwin).
J'ai jeté un coup d'œil à l'extension Reattach comme suggéré par mrstrange et aussi à l' extension très similaire Attach To Anything ... mais mon exécutable semblait se fermer trop rapidement pour que les extensions soient notifiées et attachées.
Voici ce qui m'a finalement aidé: https://stackoverflow.com/a/4042545/1560865 , qui fait référence à l'article MSDN Comment: lancer le débogueur automatiquement , qui à son tour répertorie les étapes suivantes:
a. Cliquez avec le bouton droit sur le dossier Options d'exécution du fichier image et dans le menu contextuel, cliquez sur Nouvelle clé .
b. Cliquez avec le bouton droit sur la nouvelle clé et dans le menu contextuel, cliquez sur Renommer . c. Modifiez le nom de la clé avec le nom de votre application; myapp.exe , dans cet exemple.
debugger
.vsjitdebugger.exe
.a. Ouvrez le Panneau de configuration en affichage classique et double-cliquez sur Système .
b. Cliquez sur Paramètres système avancés .
c. Dans Propriétés système , cliquez sur l' onglet Avancé .
ré. Sous l' onglet Avancé , cliquez sur Variables d'environnement .
e. Dans la boîte de dialogue Variables d'environnement , sous Variables système , sélectionnez Chemin , puis cliquez sur le bouton Modifier .
F. Dans la variable système Modifierboîte de dialogue, ajoutez le répertoire à la zone Valeur de la variable . Utilisez un point-virgule pour le séparer des autres entrées de la liste.
g. Cliquez sur OK pour fermer la boîte de dialogue Modifier la variable système .
h. Cliquez sur OK pour fermer la boîte de dialogue Variables d'environnement .
je. Cliquez sur OK pour fermer la boîte de dialogue Propriétés système .
J'espère que cela aidera quelqu'un d'autre à l'avenir!
la source
S'il n'y a pas de processus, Visual Studio ne peut pas s'y attacher .
Cependant, vous pouvez définir le programme de démarrage de votre projet comme autre chose que la sortie de votre projet.
la source
Vous pouvez afficher un MessageBox, cela bloquerait l'application, puis vous attachez ou rattachez le débogueur au processus et cliquez sur OK pour continuer:
vous pouvez l'ajouter au constructeur Form (si vous utilisez winforms), donc cela serait exécuté avant toute autre chose, sauf pour l'initialisation des composants:
Lorsque vous avez terminé votre débogage, commentez cette ligne.
la source
Vous pouvez démarrer le débogueur à partir de votre code via
Mais ne supprimez pas cette ligne avant d'envoyer votre application. Vous souhaitez peut-être utiliser les indicateurs du compilateur pour être sûr:
la source
Une petite solution qui pourrait convenir à de nombreuses personnes.
dans la première ligne de code que l'exe exécutera, ajoutez cette commande
System.Threading.Thread.Sleep (20000)
Cela fera dormir l'exe pendant 20 secondes avant de commencer à traiter quoi que ce soit. Ensuite, vous avez 20 secondes pour vous attacher au processus, ce qui peut être fait rapidement avec ctrl + alt + p, puis recherchez le processus, puis entrez pour le joindre.
Pas beaucoup de réponse mais a fonctionné un régal pour moi: -)
la source