Ma fenêtre logcat dans Eclipse affiche uniquement les premières lignes du StackTrace pour chaque exception. Cela signifie que je ne peux souvent pas voir où une exception s'est produite. Est-il possible de modifier ce paramètre?La fenêtre Eclipse Logcat supprime les traces de pile d'exception
Répondre
Si vous faites référence à la partie "... 12 lignes de plus ...", vous ne voyez que les exceptions qui ont provoqué une autre exception. Si la partie supérieure de la trace de la pile est la même que la trace précédente, l'ensemble complet des cadres n'est affiché que pour l'exception la plus externe et les autres traces reçoivent le traitement "...". En d'autres termes, le fragment d'une trace qui n'est pas affiché est un doublon d'une trace apparue plus tôt dans la chaîne de cause d'exception. Par exemple, supposons que j'ai le code où la méthode main()
appelle one()
, qui appelle two()
et ainsi de suite. four()
déclenche une exception. two()
l'attrape et le jette à nouveau. L'exception se présente comme suit:
java.lang.RuntimeException: re-throw
at Foo.two(Foo.java:14)
at Foo.one(Foo.java:7)
at Foo.main(Foo.java:3)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: first
at Foo.four(Foo.java:23)
at Foo.three(Foo.java:19)
at Foo.two(Foo.java:12)
... 3 more
Le "causé par" exception dit "... 3 plus" plutôt que d'énumérer explicitement one()
, main()
et dalvik.system.NativeStart.main
. Donc, pour obtenir la trace complète de l'exception initiale, vous devriez commencer par lire sa trace, puis continuer à la trace ci-dessus.
noter qu'il n'y a pas de chevauchement - two()
apparaît à la fois, mais dans la « première » trace il est sur l'appel à three()
, et dans la trace « re-jeter » il est sur l'instruction throw
.
Alors, quelle est la solution si l'exception originale est celle dont vous voulez voir plus de 7 lignes? – George
J'ai réécrit l'explication et ajouté un exemple. – fadden
Oui, je n'ai pas travaillé avec le "vrai" Java depuis un moment, mais j'aurais dû le faire en recherchant "Java stacktrace 12 more" ou quelque chose comme ça. Comme vous le faites remarquer, les lignes rédigées ("12 de plus") sont des lignes dupliquées de la pile ci-dessus. J'avais l'impression que LogCat réduisait les lignes "utiles" du stacktrace, mais ce n'est pas le cas. Merci d'avoir réparé mon malentendu. – George
Si votre code appelle une méthode qui produit trop de pile, vous pouvez (et devez) gérer l'exception dans votre code et afficher tout ce qui est pertinent pour les journaux.
Si vous n'avez aucune exception et que vous ne savez même pas où placer votre code dans votre code, alors le problème est entièrement ailleurs - vous devriez gérer les exceptions un peu mieux que cela.
vous pouvez surcharger toutes les méthodes de log (log.d, log.i, log.e, etc) avec (String tag, String msg, Throwable tr)
paramètres, où le troisième paramètre est l'exception. Cela vous donnera la pleine stacktrace à logcat
http://developer.android.com/reference/android/util/Log.html
Quelle version SDK utilisez-vous? C'est un comportement assez bizarre ... pouvez-vous s'il vous plaît fournir un exemple de sortie qui coupe la trace de la pile? * Modifier *: Je n'ai pas vu la balise eclipse, désolé. De toute façon, si vous utilisez le logcat original, je pense que vous n'aurez pas de problèmes: 'adb logcat' – Cristian
Si vous faites référence à la partie" ... 12 lignes de plus ... ", vous ne voyez que des exceptions étaient la cause d'une autre exception. Si la partie supérieure de la trace de la pile est la même que l'autre, l'ensemble complet des cadres n'est affiché que pour l'un d'entre eux, et l'autre reçoit le traitement "...". (Vous avez vraiment besoin d'ajouter plus de détails à votre question - nous ne faisons que deviner ce que vous voulez.) – fadden
@Fadden: Vous avez raison - il ne coupe pas du tout. Si vous postez ce commentaire en réponse, je l'accepterai. – Casebash