web-dev-qa-db-fra.com

Android Studio IDE: Interruption à une exception

Il semble que mon Android Studio ne souhaite pas interrompre une exception par défaut. L'activation de l'interruption sur "N'importe quelle exception" commence à apparaître dans les bibliothèques JDE réelles. Y a-t-il un moyen de le forcer uniquement des exceptions au sein de mon code uniquement?

Venant de l'univers Visual Studio, recherchez le comportement de débogage par défaut de VS ici.

117
AlexVPerl

Pour interrompre toutes les exceptions, capturées ou non:

  1. Ouvrez la fenêtre Points d'arrêt via Exécuter -> Afficher les points d'arrêt.
  2. La boîte de dialogue Points d'arrêt apparaît. Dans le volet de gauche, faites défiler vers le bas. Sélectionnez Toute exception sous Points d'arrêt d'exception Java
  3. Avec Toute exception sélectionné, dans le volet de droite, configurez comme suit:
    • Suspendre: vérifié
    • Tout: sélectionné
    • Condition: !(this instanceof Java.lang.ClassNotFoundException)
    • Notifications: les deux exception capturée et exception non capturée sélectionnée

Breakpoints dialog

  1. Définissez des filtres spécifiant les espaces de noms des bibliothèques dont le débogueur devrait interrompre: cochez la case Filtres de classe pour activer le filtrage de classe ( mentionné par @ Scott Barta ). Cliquez ensuite sur le bouton ... (elipsis) pour ouvrir la boîte de dialogue Filtres de classe. Spécifiez les modèles d’espace de noms de classe en cliquant sur le bouton Add Pattern Bouton (Ajouter un motif). Entrer:
    • com.myapp.* _ (remplacez-le par le préfixe d'espace de nom de votre application)
    • Java.* (note: comme indiqué dans la question de l’opérateur, ne pas laisser cette option sur NON = casser sur Java)
    • Android.* (comme ci-dessus, laissez de côté pour déboguer votre propre code d'application)
    • Ajoutez des espaces de noms supplémentaires si nécessaire (par exemple, des bibliothèques tierces)

Class Filters

  1. Appuyez sur [~ # ~] ok [~ # ~], puis fermez la boîte de dialogue Points d'arrêt.
182
CJBS

Si vous ouvrez la fenêtre Points d'arrêt, vous disposez de plusieurs options pour que celle-ci se brise ou non de manière conditionnelle. Ce que vous recherchez, ce sont les "Filtres de classe" ici. Vous pouvez spécifier une expression générique avec, par exemple, un chemin de package Java). Il ne sera cassé que pour les exceptions générées à partir de Des classes.

33
Scott Barta

Pour interrompre toutes les exceptions de votre code et d’autres exceptions si non capturés:

Cette méthode filtre les types d'exceptions que le moteur d'exécution lève en fonctionnement normal (pas très exceptionnels, n'est-ce pas?). Il n'utilise pas le filtre de classe, car il filtrerait trop; des bogues dans votre code amènent souvent les classes d'exécution à lever des exceptions (par exemple, accéder à une liste de tableaux au-delà de la fin).

  1. Activer BreakPoints d'exception Java/Toute exception pour les exceptions non capturées.

  2. Ajoutez un nouveau point d'exception Java pour la classe Exception (Java.lang) pour les exceptions capturées et non capturées. Activez Condition et réglez-le sur ceci:

        !(this instanceof Java.lang.ClassNotFoundException || this instanceof Android.system.ErrnoException || this instanceof Java.io.FileNotFoundException || this instanceof javax.net.ssl.SSLHandshakeException || this instanceof javax.net.ssl.SSLPeerUnverifiedException || this instanceof Android.system.GaiException || this instanceof Java.net.SocketTimeoutException || this instanceof Java.net.SocketException || this instanceof Java.security.NoSuchAlgorithmException)
    

Ajoutez à la liste d'exclusion dans la condition toute autre exception non exceptionnelle que vous rencontrez. (BTW, en utilisant Java.lang.Exception est un moyen d’obtenir efficacement une deuxième entrée "Toute exception".)

6
Edward Brey