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 je dois déboguer des é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, je dois mettre des points d'arrêt sur les événements de démarrage. J'ai besoin de pouvoir attacher des processus à Visual Studio, non pas en fonction d'un PID, mais sur un nom de processus spécifique ou toute autre solution qui fonctionnerait.
Bien sûr, ajouter une Thread.Sleep(1000)
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!
En fait, vous le pouvez; vous ne vous y attachez pas, vous le démarrez. Dans les propriétés de votre projet, sous l'onglet Débogage, spécifiez le chemin d'accès du programme auquel vous souhaitez attacher dans la zone de texte "Commande".
Vous pouvez également saisir des arguments de ligne de commande pour le programme dans la zone "Arguments de commande":
Assurez-vous que "Attacher" est réglé sur "Non".
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 gratuitement Rattachez l'extension pour Visual Studio . Demandez-lui de se reconnecter au nom du processus avant son lancement. Il fera apparaître une boîte de dialogue modale indiquant qu'il attend le lancement du nom du processus.
Lancez maintenant le processus et le débogueur Visual Studio se connectera immédiatement, interceptant les exceptions et atteignant les points d'arrêt.
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.
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 (à savoir: démarré depuis cygwin).
J'ai jeté un coup d'œil à l'extension Reattach comme suggérée par mrstrange et aussi très similaire Attach To Anything extension ... mais mon exécutable semblait se fermer trop rapidement pour que les extensions soient notifier et joindre.
Ce qui m'a finalement aidé était le suivant: https://stackoverflow.com/a/4042545/1560865 , qui fait référence à l'article MSDN Comment: lancer automatiquement le débogueur , qui en -turn répertorie les étapes suivantes:
debugger
.vsjitdebugger.exe
.J'espère que cela aidera quelqu'un d'autre à l'avenir!
S'il n'y a pas de processus, Visual Studio ne peut pas attacher.
Cependant, vous pouvez définir le programme de démarrage de votre projet sur autre chose que la sortie de votre projet.
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:
MessageBox.Show("Attach process to debugger and click ok!");
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:
public MainForm()
{
InitializeComponent();
MessageBox.Show("Attach process to debugger and click ok!");
}
Lorsque vous avez terminé votre débogage, mettez cette ligne en commentaire.
Une petite solution qui pourrait convenir à de nombreuses personnes.
dans la première ligne de code exécutée par l'exe, 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 trouvez le processus, puis entrez pour attacher.
Pas beaucoup de réponse mais a fonctionné un régal pour moi: -)