Подтвердить что ты не робот

Окно Eclipse Logcat отключает следы стека объектов

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

4b9b3361

Ответ 1

Если вы ссылаетесь на часть "... еще 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.

Ответ 2

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

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

Ответ 3

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

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