Comment vous "attacher au processus ..." pour une application console qui s'exécute depuis une fenêtre CMD et non lancée par F5? La raison pour laquelle je pose cette question est que l'application utilise des arguments en ligne de commande et que je souhaite vivre une expérience authentique.
J'ai même attaché à CMD.exe
, mais pas de chance, ni à définir un point d'arrêt à l'aide de Console.ReadKey()
avec également pas de chance. Je suis un peu perdue ici.
Est-ce possible?
Vous avez quelques options:
Pour déboguer à partir de la ligne de commande plutôt que d'utiliser le labyrinthe de l'interface graphique de VS:
Lancer l'invite de commande de Visual Studio
tapez vsjitdebugger /? qui vous donne un exemple de commande comme:
c:> vsjitdebugger [NomApp] [Args]: Lance le fichier exécutable spécifié et attache au débogueur
c:> liste de tâches | trouver/i "web"
C'est possible, bien sûr. Essayez l'une de ces deux:
Comme d'autres l'ont déjà dit, vous pouvez spécifier les arguments de ligne de commande stratup à partir du projet et simplement démarrer le débogage dans Visual Studio.
Si vous souhaitez toujours attacher à l'application en cours d'exécution, vous devez attacher le débogueur à MyApp.exe (quel que soit le nom de votre application - l'exe compilé dans le répertoire bin\debug) et non à cmd.exe. Attachement à cmd.exe l'attache au processus de commande, pas au processus de votre application.
Dans la section "Debug" des paramètres de projet, une zone de texte pour "Arguments de la ligne de commande:". Lorsque le débogueur VS démarre le programme C #, il transmet ces arguments au processus comme si le programme avait été lancé à partir de la ligne de commande avec ces arguments.
L'alternative consiste à utiliser un débogueur de ligne de commande. Il existe quelques options ici, mais en toute honnêteté, elles ne sont probablement pas ce que vous voulez utiliser à la place de VS, sauf si vous vous lancez dans des scénarios de débogage très lugubres. Si vous souhaitez les consulter, il y a un bon résumé dans cette réponse SO:
Vous pouvez également essayer la technique de passer un appel à System.Diagnostics.Debugger.Break()
au début de votre initialisation - si le programme est exécuté sous un débogueur, il se cassera et ne fonctionnera pas sous un débogueur. Vous pouvez effectuer l'appel de manière conditionnelle en fonction d'un fichier de configuration ou d'un paramètre de variable d'environnement, de sorte que vous n'obtenez la pause que si cela vous intéresse vraiment (quelque peu intrusif, mais pas trop mal).
Ajoutez simplement une entrée de registre pour le nom de votre exe dans "Options d'exécution du fichier image HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image", en ajoutant une clé "débogueur" associée à "vsjitdebugger.exe", une boîte de dialogue s'ouvre en vous demandant de choisir une version de VS à déboguer lorsque le fichier exe démarre.
voir MSDN " Comment: lancer le débogueur automatiquement " pour plus d'informations.