Existe-t-il une «rupture d'exception» dans IntelliJ?


318

Existe-t-il une fonctionnalité qui interrompra automatiquement le débogage lors de la première occurrence d'exception?

Alors on

  1. démarrer l'application
  2. faire quelque chose qui jette une exception
  3. a obtenu IntelliJ surgi en surbrillance la ligne où l'exception s'est produite.

Vous voulez probablement rompre uniquement avec les exceptions non capturées, non?
David Ferenczy Rogožan

Réponses:


367

Run | Afficher les points d'arrêt | Points d'arrêt d'exception


Malheureusement, j'ai trouvé qu'en pratique (avec des données volumineuses), les variables de trame dont vous vous souciez ne se chargent pas toujours.
information_interchange

158

Un moyen rapide de faire apparaître la boîte de dialogue consiste à appuyer sur Ctrl+ SHIFT+ F8(sur Mac: Cmd+ SHIFT+ F8), puis à cliquer sur l'onglet points d'arrêt d'exception. Si c'était le dernier onglet que vous consultiez, il sera toujours sélectionné, ce qui facilitera l'activation et la désactivation des exceptions.

Cela entraînera la rupture d'IntelliJ au point du code (ou du code de bibliothèque) où l'exception a été déclenchée. Plus précisément, vous obtenez une «première chance» à la gestion des exceptions, avant de parcourir la pile à la recherche de blocs catch / finally à exécuter.


CONSEIL: Java a tendance à lancer de nombreuses exceptions en interne lors du chargement des classes, donc cette rupture sur toutes les exceptions peut devenir assez fastidieuse. La bonne nouvelle est que vous pouvez exclure certains types d'exceptions à l'aide du champ de condition .

Par exemple:

!(this instanceof java.lang.ClassNotFoundException)

Vous pouvez enchaîner plusieurs de ces conditions avec &&.

entrez la description de l'image ici


9
Existe-t-il un moyen de dire "interrompre les exceptions de mon projet uniquement (pas du système Java)"?
Damn Vegetables

16
N'oubliez pas le "Désactivé jusqu'à ce que le point d'arrêt sélectionné soit atteint:" - celui-ci est incroyable. Définissez simplement un point d'arrêt dans votre code après que toutes les bibliothèques Java ou autres ont été chargées et configurées. Choisissez ensuite votre point d'arrêt dans la liste déroulante et attendez. Votre point d'arrêt sera atteint, puis une fois que vous aurez continué, votre nouveau filtre d'exception Caught & Uncaught entrera en vigueur. :)
Louis St-Amour

1
N'oubliez pas de cocher à la fois "Exception interceptée" et "Exception non interceptée" au bas de la boîte de dialogue Points d'arrêt.
Robino

59

Dans IntelliJ IDEA 14, accédez à:

Run -> View Breakpoints -> Check "Java Exceptions Breakpoints" -> Uncheck "Caught Exceptions"

Si vous ne décochez pas, Caught Exceptionsl'exécution sera arrêtée à chaque fois que Java Frameworklève une exception interne.


1
Exécuter -> Afficher les points d'arrêt ... -> Cochez "Points d'arrêt Java Exceptions" -> Décochez "Exceptions détectées"
Jonas

2
Malheureusement, cela rompt toujours avec les exceptions interceptées pour moi, même après avoir désactivé les "exceptions interceptées".
Carcigenicate

Ce sont des informations très importantes, je dirais, sinon, c'est un enfer d'exception sans valeur d'information. Principalement lors de l'utilisation de grands frameworks comme Grails.
David Ferenczy Rogožan

OK, j'ai changé d'avis - les deux options, avec et sans exceptions interceptées, sont mauvaises, car généralement, dans une application Web typique, toutes les exceptions sont interceptées, il existe un bloc de capture de niveau supérieur qui capture tout et le formate pour qu'il soit présenté à l'utilisateur. Donc, sans les exceptions prises, il ne casse rien, avec eux, il casse des centaines de fois lors d'une seule demande. Les deux inutiles :(
David Ferenczy Rogožan

Rien n'est inutile, si vous savez vous en servir.
Alessandro Flati

12

Oui il y a. Vous devez définir un point d'arrêt d'exception (il peut s'agir de "Toute exception") dans la boîte de dialogue des points d'arrêt d'IntelliJ IDEA.

Les exceptions peuvent être filtrées par condition ou classe si vous le souhaitez, ou selon que vous êtes intéressé par les exceptions interceptées ou non interceptées.


7

Si vous cliquez sur le petit signe "+" dans le coin supérieur gauche, vous pouvez ajouter un nouveau point d'arrêt. Si vous sélectionnez Exception Breakpoint, vous obtenez une petite boîte de dialogue dans laquelle vous pouvez entrer la classe d'exception à interrompre (au cas où vous ne souhaitez pas interrompre toutes les exceptions).


0

Dans les versions plus récentes sur intellij dans sous Exécuter > Afficher les points d' arrêt .

Vérifiez ensuite les points d'arrêt Java Exception -> Toute exception .

Un bon moyen de déboguer les exceptions consiste à utiliser votre package d'application principal et le caractère générique .*. De cette façon, vous ignorez toutes les autres exceptions de bibliothèques, car la plupart du temps vous recherchez des exceptions levées par votre application et non par une autre bibliothèque (ce qui peut être beaucoup d'exceptions).

Comme un exemple montré dans l'image que j'utilise com.gs.mercury.*pour casser chaque fois que l'application lève une exception. Si vous utilisez des exceptions pour ce qu'elles sont (pour gérer des cas exceptionnels et non pour gérer le flux de situations normales), vous ne vous arrêterez que lorsque vous atteindrez l'exception souhaitée presque tout le temps.

PD. réponse ajoutée juste pour souligner le filtre de classe Catch assez utile .

Points d'arrêt

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.