Visual Studio 2015 briser sur les exceptions non gérées ne fonctionne pas
Visual studio utilisé pour avoir une case à cocher pour "Casser de l'Onu exception gérée". En 2015, ce qui a été retiré ou déplacé quelque part je ne le trouve pas). Alors maintenant, mon convertis projets ne se cassent plus si j'échoue à fournir un niveau de l'utilisateur gestionnaire d'exception. Je ne veux pas briser sur tous les "exceptions lancées" parce que j'ai poignée spécifiques. Juste là où j'échoue à fournir un gestionnaire spécifique.
Maintenant mon code se ferme simplement la procédure en cours et continue l'exécution à l'appel suivant emplacement de pile, PAS BON.
Quelqu'un sait comment obtenir ce retour dans Visual Studio 2015? J'ai juste mis à niveau vers l'édition de la communauté d'hier.
- Visual Studio 2015 sera de garder la configuration actuelle de votre version précédente, ne devrait-elle pas la
Tool
ouWindow
onglet vous disposez de tous les emplacements de votre choix. Dans votre cas, votre recherche pour les Paramètres d'Exception. - ce n'est pas que je ne sais pas où trouver le panneau. Mon souci est le comportement que je cherche n'est pas dans le panneau.
- même problème ici. Dans notre cas, nous nous attendons à une exception pause lors de l'autofac n'avez pas tous les types d'enregistrement. En utilisant la même solution avec vs2013 elle travaille en vs2015 nous ne recevons rien. c'est aussi un problème avec d'autres tiers, les inscriptions et les exceptions (comme nservicebus).Je me demande si c'est seulement le cas pour le projet créé dans vs2013 et a couru dans vs2015
- Que fenêtre nouvel outil, ça craint vraiment.
- Selon MS Classifications des Exceptions si vous avez exception non gérée toujours, il rompt le débogueur. Peut-être, vous devez cocher l'option "Pause quand excptions de la croix-domaine d'application ..." dans le menu "Options -> Débogage -> Général" de la liste.
- Je suis un "Système.AccessViolationException" sur "Cadre".Naviguer(typeof(Page2));" quelqu'un A été en mesure de résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Il y a une nouvelle fenêtre "Paramètres d'Exception" qui s'affiche dans le volet inférieur droit par défaut lorsque vous commencez le débogage. Il dispose de toutes les options que vous attendez.
Vous pouvez le faire avec CTRL+ALT+E
Cela vous permet de piocher dans les exceptions de provoquer une rupture dans le débogueur.
La clé, cependant, est que vous pouvez également définir si ces exceptions toujours casser, ou break uniquement lorsque c'est une exception non gérée -- mais ce paramètre n'est pas très intuitive.
Vous devez d'abord cocher "Activer uniquement Mon Code" dans Outils > Options > le Débogage.
Ceci vous permet alors de cliquer droit sur l'en-tête de colonne (Pause Quand Jeté) dans les nouvelles Exceptions Paramètres de la fenêtre et ajouter les "Actions Supplémentaires" colonne, qui permet de définir chaque exception, comme "Continuer quand non gérée dans le code de l'utilisateur".
Donc suffit de cliquer-droit sur une exception ou un groupe entier et de désactiver la fonction "Continuer quand non gérée dans le code de l'utilisateur" pavillon. Malheureusement, les "Actions Supplémentaires" colonne apparaîtra vide qui est la même que pour "Casser quand non gérée dans le code de l'utilisateur".
Plus à ce sujet ici:
http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/23/the-new-exception-settings-window-in-visual-studio-2015.aspx
J'ai eu le même problème et j'ai réussi à résoudre ce problème en faisant cela -
le les Paramètres d'Exception fenêtre.
Que c'est!
J'ai été inspirée par cette post depuis que je suis à l'aide d'un version x64 de Windows.
System.ArgumentException
est manipulé, et des moments où il ne l'est pas. Je ne se soucient de rupture quand il est pas manipulé.Pour googleurs qui veut casser que lorsque l'exception des préoccupations de leur code, il y a une option dans Visual Studio 2015: Options->Débogage->Général>Juste Mon Code. Une fois la case cochée, elle permet de ne pas casser lorsque l'exception est gérée (jeté et enclenché) à l'extérieur de votre code.
Microsoft ont subtilement changé la logique dans la nouvelle fenêtre exceptions.
Voir http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/23/the-new-exception-settings-window-in-visual-studio-2015.aspx
La clé de la pièce:
Cependant, si comme moi vous avez un Mondiale Gestionnaire d'exceptions Non gérées dans votre code, puis le deuxième élément de cette liste est la clé: Pour moi, aucune exception ne peut donc être véritablement prise en charge, ce qui semble être différent de VS2013.
Pour revenir au comportement où VS pauses sur les exceptions non gérées, j'ai dû cocher tous les types d'exception j'ai voulu casser et puis d'autre part de s'assurer que les "Options Supplémentaires" (vous devrez peut-être faire de cette colonne visible*) pour "Continuer quand non gérée dans le code de l'utilisateur" a été PAS ensemble. Le VS2015 logique ne pas semblent considérer mon Mondiale Gestionnaire d'exceptions Non gérées être "traitée dans le code utilisateur", de sorte qu'il ne se brisent sur ces; il ne rompt pas pris cependant des exceptions. De ce fait, il travail comme VS2013 fait.
*Comment activer les "Actions Supplémentaires" de la colonne
Si je suis correctement lire entre les lignes ici, le problème est que l'exception est effectivement "disparition" même si le débogueur par défaut de comportement devrait briser sur les exceptions non gérées.
Si vous avez des méthodes asynchrones, vous pourriez être en cours d'exécution dans cette question, car des exceptions n'est pas pris sur un thread du pool dans le cadre d'une Tâche de poursuite ne sont pas considérés comme des exceptions non gérées. Plutôt, ils sont absorbés et stockés à la Tâche.
Par exemple, prendre un coup d'oeil à ce code:
Si vous exécutez ce programme avec le débogueur par défaut les paramètres (à l'arrêt sur les exceptions non gérées uniquement), le débogueur s'arrête pas. C'est parce que le thread du pool alloués à la poursuite des hirondelles de l'exception (en passant à l'instance de la Tâche) et libère lui-même de retour à la piscine.
Noter que, dans ce cas, le vrai problème est que les
Task
retourné parTest()
n'est jamais vérifié. Si vous avez le même type de "fire-and-forget" logique dans votre code, alors vous ne verrez pas les exceptions à l'époque, ils sont jetés (même s'ils sont " non gérée à l'intérieur de la méthode), à l'exception ne s'affiche que lorsque vous observez la Tâche par l'attendaient, la vérification de son Résultat ou explicitement, en regardant son Exception.C'est juste une supposition, mais je pense qu'il est probable que vous observez quelque chose comme ça.
Debugger.Break()
appel. Alternativement, vous pouvez ajouter une expliciteDebugger.Break()
dans leTaskScheduler.UnobservedTaskException
gestionnaire, mais l'inconvénient est que cela peut déclencher beaucoup plus tard que l'exception d'origine, comme il arrive sur le finaliseur fil lorsque la Tâche est nettoyé. En général, vous devez vous efforcer de toujours observer les résultats des Tâches, ou au moins un bloc try-catch pour se connecter au moment de la défaillance.Dans mon expérience, les paramètres d'exception en 2015 jettent complètement hors de contrôle si vous changer quoi que ce soit.
Sur prévoyons que si vous jusqu'à ce que le groupe parent "CLR", alors vous ne devriez pas obtenir tout casser execpt pour non gérée. Vous aurez toujours casser si une exception n'est pas gérée. Mais, si vous avez le CLR groupe blanc, code à l'intérieur d'un try...catch simplement ne devrait pas provoquer une rupture. Ce n'est PAS le cas.
Solution: Dans la nouvelle exception des paramètres de boîte à outils, cliquez-droit et choisissez "restaurer les paramètres par défaut". Taadaaaa... Il se comporte normalement. Maintenant, ne pas le visser avec elle.
Essayez de suivre les instructions:
https://msdn.microsoft.com/en-us/library/x85tt0dd.aspx
try { task.Wait(); } catch { ... }
) et OperationCanceledException dans la tâche a été considéré comme non gérée dans le code de l'utilisateur en quelque sorte.C'est un peu déroutant, et à mon avis pas aussi bonne que l'ancienne boîte de dialogue exceptions, mais de toute façon.
Si une exception est dans la liste et coché, puis, le débogueur s'arrête à chaque fois que l'exception est levée.
Si une exception est blanc ou pas dans la liste, puis le débogueur ne pause lorsque cette exception est de type utilisateur non gérée.
Par exemple, dans la capture d'écran ci-dessous, le débogueur s'arrête à chaque fois qu'un
System.AccessViolationException
est levée, mais pour toutes les autres exceptions, il ne se briser si l'exception est l'utilisateur non gérée.Lorsque j'ai mis à VS2015, j'ai aussi eu des problèmes où des exceptions utilisé pour "casser" de l'application, mais sont maintenant ignorés et passa directement sur. Il ya des moments où nous voulons que notre code de intentionnellement lancer des exceptions dans des endroits où nous voulons que le code pour arrêter, plutôt que de continuer. Nous utilisons toujours la phrase
Throw New Exception("Message")
pour obtenir notre code intentionnellement pause:Avec VS2015, le classique "du Système.D'Exception" est ce qui est jeté quand nous disons
Throw New Exception
. Par conséquent, nous avons besoin de vérifier le Système".Exception" à cocher dans le nouveau les Paramètres d'Exception:Vérifier le Système.Exception Boîte
Une fois la case cochée, le code n'a comme prévu.
La solution est de ce point de vue sémantique le contraire de ce que vous pensez que vous définissez. Vous devez vous assurer que Continuer lorsque non gérée dans le code de l'utilisateur est pas activé c'est à dire pas vérifié comme indiqué dans la Actions Supplémentaires colonne dans la les paramètres d'Exception onglet - voir ci-dessous:
vous êtes effectivement dire de ne pas continuer (c'est à dire de se casser) lorsque la non gérée dans le code
Pour ce faire:
Qu'il a fait pour moi - encore heureux.
C'était dans VS 2015
Il y a certainement quelques bug dans Visual Studio qui peut l'amener à se coincer nécessitant un redémarrage. Même VS2015.
J'ai eu un seul thread situation où un
NullReferenceException
était de se faire prendre par un "extérieur" de gestionnaire (toujours dans mon code), même si je l'ai demandé à la pause quand il a été soulevé.Je réalise que c'est un 'manipulés' exception et vous parlez d'un "non gérée" one - cependant, je suis assez sûr que, parfois, un redémarrage rapide de VS allons résoudre ce problème, si IISRESET ne le fait pas.
Visual Studio 2017 fonctionne très bien avec la gestion des erreurs. Visual Studio 2015 sur l'autre main suce à la gestion des erreurs avec des tâches parce que dans le mode de débogage toutes les exceptions qui se produisent dans une tâche asynchrone sont pris, mais alors si je fais un pas de plus, il se bloque indéfiniment. Si elle est exécutée sans débogage il se bloque indéfiniment sans exception pris!!! J'aime visual studio utilise depuis 1995 et 2015 est la pire version de loin, bien que j'ai sauté directement à partir de 2010 à 2015. J'ai passé 8 heures à essayer d'obtenir ce traitement d'exception de travail, sans succès. J'ai copié le code exact à 2017 sur mon ordinateur à la maison et il a parfaitement fonctionné. Je suis très irrité que Microsoft a poussé les tâches dans un cadre qui, en 2015, le compilateur ne peut pas gérer correctement.