2010-03-19 6 views
9

Je travaille sur un programme qui utilise la méthode System.Diagnostics.Debugger.Break() pour permettre à l'utilisateur de définir un point d'arrêt à partir de la ligne de commande. Cela a fonctionné très bien pendant plusieurs semaines maintenant. Cependant, quand je travaillais sur la réparation d'un test unitaire aujourd'hui, j'ai essayé d'utiliser le commutateur de débogage de la ligne de commande, et cela n'a pas fonctionné.System.Diagnostics.Debugger.Debug() a cessé de fonctionner

Voici ce que j'ai essayé:

  • J'ai confirmé que la méthode de débogage() est vraiment appelé (en mettant un System.Console.WriteLine() après)
  • Je ai confirmé que la construction est encore dans Debug
  • Je l'ai fait une construction propre
  • J'ai remis en marche produit studio

une recherche rapide sur Google didn ne révèlent rien, et la documentation de l'API pour .Net ne mentionne rien sur cette fonction ne fonctionne pas correctement. Alors ... des idées?

Répondre

17

J'ai finalement compris ce qui se passait. Pour une raison quelconque, quelque chose a changé sur ma machine, de sorte que le simple appel de Debugger.Debug n'était plus suffisant (je ne comprends toujours pas ce qui a changé). Dans tous les cas, je peux maintenant faire le débogueur à venir à l'aide:

if (Debugger.IsAttached == false) Debugger.Launch(); 
+0

J'ai rencontré ce même problème lors de la migration de Visual Studio 2008 vers Visual Studio 2010. 'Debugger.Break()' a bien fonctionné dans VS2008, pour VS2010, j'utilise 'Debugger.Launch()'. –

+0

Même chose dans VS2015 - Debugger.Break() ne fonctionnait pas - Debugger.Launch() fonctionnait – chenop

0

Utilisez-vous VS 2008 SP1? J'ai eu beaucoup de problèmes autour du débogage dans cette version, et tous ont été résolus par ce Microsoft patch.

points d'arrêt mis en boucles ou dans fonctions récursives ne sont pas touchés dans tous les processus à chaque itération. Souvent, certains processus peuvent passer à travers de nombreuses itérations d'une boucle, en ignorant le point d'arrêt, avant qu'un processus ne soit arrêté.

points d'arrêt sont touchés, mais ils ne sont pas visibles lors du débogage plusieurs processus dans Visual Studio débogueur.

D'autres problèmes liés au débogueur sont également résolus.

+0

Désolé ... après l'installation du correctif, le problème persiste. :-( –

2

j'utilisais méthode debugger.launch() et tout à coup cessé de fonctionner. en utilisant

if (Debugger.IsAttached == false) Debugger.Launch(); 

n'a pas non plus affiché le débogueur. J'ai essayé de réinitialiser mes paramètres de studio visuel et cela a fonctionné!

0

Extrait d'ici (MSDN) la note suivante:

A partir de net_v40_long, le moteur d'exécution ne peuvent plus exercer un contrôle strict de lancer le débogueur pour le M: ​​méthode System.Diagnostics.Debugger.Break, mais signale une erreur au sous-système Windows Error Reporting (WER). WER fournit de nombreux paramètres pour personnaliser l'expérience de génération de rapports, de sorte que de nombreux facteurs influencent la manière dont WER répond à une erreur, telle que la version du système d'exploitation, le processus, la session, l'utilisateur, la machine et le domaine. Si vous obtenez des résultats inattendus lors de l'appel de la méthode M: System.Diagnostics.Debugger.Break, vérifiez les paramètres WER sur votre ordinateur.Pour plus d'informations sur la personnalisation de WER, consultez Paramètres WERhttps: //msdn.microsoft.com/library/windows/desktop/bb513638.aspx. Si vous voulez vous assurer que le débogueur est lancé indépendamment des paramètres WER, veillez à appeler la méthode M: System.Diagnostics.Debugger.Launch à la place.

Je pense qu'il explique le comportement détecté.

Questions connexes