Je veux attacher à un processus (a.exe) dès qu'il est généré, est-ce faisable avec VS? Je ne connais que le nom du processus. En réalité, ce que je veux accomplir est de définir un point d'arrêt dans le code c #, mais le code appartient à un autre exécutable qui sera lancé par l'application en cours d'exécution (c.exe). Le code est à l'intérieur de la période d'initialisation, il est donc impossible pour moi de faire l'attachement manuellement.
Quand j’ai déjà fait face à cette situation (et que j’ai contrôlé les deux processus), j’ai trouvé une solution de contournement décente consistant à appeler le point d’entrée Debugger.Launch () du processus de génération. VS ouvrira ensuite une boîte de dialogue et vous permettra de vous connecter au processus.
Voir l'article MSDN, Comment: lancer le débogueur automatiquement - Cela vous permettrait d'ignorer la multitude de travaux en cliquant sur les boîtes de dialogue de confirmation [sans désactiver le contrôle de compte d'utilisateur ou tout autre problème]. L'article énumère les étapes suivantes:
- Démarrez l'éditeur de registre (regedit).
- Dans l'Éditeur du Registre, ouvrez le dossier HKEY_LOCAL_MACHINE.
- Accédez aux options d'exécution du fichier HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image.
- Dans le dossier Options d'exécution du fichier image , localisez le nom de l'application à déboguer, tel que myapp.exe . Si vous ne trouvez pas l'application que vous souhaitez déboguer:
une. Cliquez avec le bouton droit sur le dossier Options d’exécution du fichier image , puis dans le menu contextuel, cliquez sur Nouvelle clé .
b. Cliquez avec le bouton droit sur la nouvelle clé, puis 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.- Cliquez avec le bouton droit sur le dossier myapp.exe , puis dans le menu contextuel, cliquez sur Nouvelle valeur de chaîne .
- Cliquez avec le bouton droit sur la nouvelle valeur de chaîne et dans le menu contextuel, cliquez sur Renommer.
- Changez le nom en debugger.
- Cliquez avec le bouton droit sur la nouvelle valeur de chaîne et, dans le menu contextuel, cliquez sur , puis sur Modifier . La boîte de dialogue Modifier la chaîne apparaît.
- Dans la zone Données de la valeur , tapez vsjitdebugger.exe .
- Cliquez sur OK.
- Dans le menu du registre , cliquez sur , puis sur Quitter .
- Le répertoire contenant vsjitdebugger.exe doit figurer dans votre chemin système. Pour l'ajouter au chemin d'accès système, procédez comme suit:
une. Ouvrez le Panneau de configuration en affichage classique, puis 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 boîte de dialogue Modifier la variable système , ajoutez le répertoire à la valeur de la variable boîte. 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 .- Maintenant, utilisez n'importe quelle méthode pour démarrer votre application. Visual Studio va démarrer et charger l'application
Une autre solution intéressante consiste à utiliser l'extension "ReAttach" de Visual Studio. Peut être trouvé ici .
Si votre processus n'est pas en cours d'exécution, ReAttach vous demandera de le démarrer et de le joindre dès qu'il sera disponible.
Je cherchais un moyen de le faire lorsque je lançais une application console dans le cadre d'un test d'acceptation.
J'ai trouvé cela aujourd'hui - https://blogs.msdn.Microsoft.com/visualstudioalm/2014/11/24/introducing-the-child-process-de-bugging-power-tool/
C'est un ajout à Visual Studio et cela fonctionne à merveille. Lorsque je débogue un test d'acceptation (j'utilise resharper test runner) et que je place un point d'arrêt dans l'application lancée, je peux maintenant déboguer l'application dans la même instance de Visual Studio.
"Entrian Attach" est un complément de Visual Studio qui remplit exactement cette fonction. Vous lui indiquez le nom de votre exécutable et attache le débogueur au démarrage du processus, quel que soit le mode de démarrage, avant l'exécution du code.
(Divulgation: je suis l'auteur. J'ai construit Attach parce que j'ai ce problème tout le temps!)
Vous pouvez également utiliser l'utilitaire gflags.exe fourni avec les outils de débogage de Windows. Tout ce que vous avez à faire est d'ouvrir gflags.exe, puis d'aller au fichier image entrer l'onglet nom du processus (a.exe) et cocher la case du débogueur, dans la zone de texte. entrez le chemin vs avec l'option/debugexe (par exemple, "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe"/debugexe)
Le visual studio automatiquement s'ouvrira une fois le processus en cours, vous pourrez ajouter vos points d'arrêt et appuyer sur Exécuter.
Que diriez-vous de cela: ouvrez le projet pour a.exe
dans le VS, définissez les points d'arrêt, etc. Ensuite, ouvrez Propriétés du projet pour a.exe, Debugging tab, et définissez Commande à c.exe
. Ensuite, appuyez simplement sur Debug .
Malheureusement, je n'ai jamais fait cela avec des projets gérés, alors je peux être hors de propos ici. Cependant, c'est ce que je ferais avec des projets non gérés (C++). Je pense que le débogueur géré devrait aussi le supporter.
Si le code C # est lancé par du code non managé, cochez la case "Débogage du code non managé" @ Propriétés du projet -> Options de débogage.
J'ai vraiment aimé Entrian Attach comme suggéré par @RichieHindle, mais j'ai aussi trouvé cet outil gratuit qui fait quelque chose de similaire. Il intercepte tous les processus lancés par le processus de débogage.
Processus engendré: https://marketplace.visualstudio.com/items?itemName=Brubtsov.SpawnedProcessCatcher
À partir de VS 2013 SP2, il existe un outil gratuit de Microsoft qui fait la même chose que "Spawned Process Catcher" mentionné précédemment: il relie tous les processus démarrés par un processus déjà en cours de débogage. Remarque: je n'ai testé cela qu'avec C++ non géré (cela fonctionne parfaitement).
Outil multifonctions de débogage de processus enfants Microsoft