Окно Eclipse Logcat отключает трассировки стека исключений - PullRequest
17 голосов
/ 25 мая 2010

В моем окне logcat в Eclipse отображаются только первые несколько строк StackTrace для каждого исключения. Это означает, что я часто не вижу, где произошло исключение. Есть ли способ изменить эту настройку?

Ответы [ 3 ]

32 голосов
/ 26 мая 2010

Если вы ссылаетесь на часть «... еще 12 строк ...», вы видите это только для исключений, которые были причиной другого исключения. Если верхняя часть трассировки стека совпадает с предыдущей трассой, полный набор кадров отображается только для самого внешнего исключения, а остальные трассы обрабатываются "...".

Другими словами, фрагмент трассы, которая не показана, является дубликатом трассы, появившейся ранее в цепочке причин исключений. Например, предположим, у меня есть код, где метод main() вызывает one(), который вызывает two() и так далее. four() выдает исключение. two() ловит и перебрасывает. Исключение будет выглядеть так:

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

Исключение «вызвано» говорит «... еще 3», а не явно перечисляет one(), main() и dalvik.system.NativeStart.main. Таким образом, чтобы получить полную трассировку исходного исключения, вы должны начать с чтения его трассы, а затем продолжить с трассировки выше.

Обратите внимание, что перекрытия нет - two() появляется в обоих, но в «первой» трассе он находится на вызове three(), а в «повторной» трассировке - в инструкции throw.

1 голос
/ 27 ноября 2012

вы можете перегрузить все методы журнала (log.d, log.i, log.e и т. Д.) Параметрами (String tag, String msg, Throwable tr), где третий параметр является исключением. Это даст вам полную трассировку стека в logcat

http://developer.android.com/reference/android/util/Log.html

0 голосов
/ 27 ноября 2012

Если ваш код вызывает метод, который создает слишком большой стек, вы можете (и должны) обработать исключение в своем коде и вывести все, что имеет отношение к журналам.

Если у вас нет обработки исключений вообще, и вы даже не знаете, где в вашем коде следует размещать такой обработчик, тогда проблема полностью в другом - вы должны обрабатывать исключения немного лучше, чем это.

...