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

17

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

    
задан Casebash 25.05.2010 в 05:17
источник
  • Какую версию SDK вы используете? Это довольно странное поведение ... можете ли вы представить пример вывода, который отсекает трассировку стека? Изменить: я не видел тег eclipse, извините. В любом случае, если вы используете оригинальный логарифм, я думаю, у вас не будет проблем: adb logcat –  Cristian 25.05.2010 в 05:20
  • Если вы ссылаетесь на часть «... еще 12 строк ...», вы увидите только исключения, которые стали причиной другого исключения. Если верхняя часть трассировки стека совпадает с другой, полный набор кадров отображается только для одного из них, а другой получает обработку «...». (Вам действительно нужно добавить больше подробностей к вашему вопросу - мы просто догадываемся о том, чего вы хотите.) –  fadden 25.05.2010 в 07:29
  • @Fadden: Вы правы - это совсем не отключает. Если вы опубликуете этот комментарий в качестве ответа, я приму его. –  Casebash 26.05.2010 в 01:36

3 ответа

32

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

ответ дан fadden 26.05.2010 в 19:39
  • Итак, каково решение, если исходное исключение - это то, которое вы хотите увидеть более чем на 7 или около того? –  George 21.11.2012 в 07:03
  • Я переписал объяснение и добавил пример. –  fadden 27.11.2012 в 19:35
  • Да, я не работал с «реальной» Java в то время, но я должен был это обработать с помощью googling для «Java stacktrace 12 more» или что-то в этом роде. Как вы указываете, отредактированные строки (далее «12 больше») представляют собой повторяющиеся строки из stacktrace выше. У меня создалось впечатление, что LogCat обрезает «полезные» строки stacktrace, но это не так. Спасибо за исправление моего недоразумения. –  George 27.11.2012 в 23:41
1

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

Ссылка

    
ответ дан aldo.roman.nurena 27.11.2012 в 18:34
-1

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

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

    
ответ дан Sten Petrov 27.11.2012 в 17:57