Заставить Eclipse показывать самое верхнее исключение в своей консоли вместо полной трассировки стека - PullRequest
1 голос
/ 27 марта 2011

Есть ли способ сделать так, чтобы Eclipse отображался в консоли как «верхнее» исключение, вместо того, чтобы просто печатать всю трассировку стека и оставлять меня всегда с экраном, заполненным практически бесполезным материалом? Вот картинка:

enter image description here

Есть в основном две вещи, которые я хотел бы знать в 99% случаев, когда есть исключение: это имя + сообщение плюс, в каком методе это произошло. Ни один из них не виден без прокрутки вверх. Вот как я считаю, данные должны быть показаны: enter image description here

Есть ли способ изменить поведение этого Затмения?

Ответы [ 4 ]

3 голосов
/ 27 марта 2011
  1. Я не знаю ни одной функции Eclipse, которая сделала бы это.

  2. Я не согласен с тем, что IDE должен сделать это. У IDE нет способа узнать , какая информация в трассировке стека полезна или бесполезна. Прокрутка консоли к предположительно полезной части трассировки стека на основе некоторой эвристики может помочь вам немного сегодня, но завтра это может помешать вам много . И проблема / опасность, вероятно, будет еще хуже, если вы начнете сворачивать или редактировать трассировку стека, отображаемую в окне консоли.

Используйте полосу прокрутки, Люк!


Если вы действительно думаете, что это будет хорошей идеей, реализуйте ее и отправьте патч разработчикам Eclipse. Или создайте плагин. Или используйте другую IDE.


Кстати, скриншот, который вы включили в свой комментарий, не показывает IDE, прокручивающий окно консоли. Скорее он показывает исключение, которое фактически было доставлено в IDE как есть. Eclipse может сделать это тоже ... до некоторой степени ... как показано тестовым представлением JUnit, представлением Error и так далее. Но это не работает, если трассировка стека отрисована как текст и записана в консольное окно. (Для начала, текстовый формат трассировки стека фактически не указан.)

2 голосов
/ 27 марта 2011

Я не думаю, что в Eclipse есть способ сделать это.

Но я думаю, что IDE на самом деле не имеет к этому никакого отношения. Именно JVM печатает этот вывод на консоль, поскольку ваша программа не перехватывает исключение. Если вы запустите его из командной строки, вы увидите тот же вывод.

Я думаю, что программа должна обработать исключение и вывести на консоль желаемый уровень информации.

1 голос
/ 05 февраля 2013

Вы можете использовать плагин eclipse, такой как grepclipse или GerpConsole, чтобы фильтровать вывод консоли с регулярными выражениями.

1 голос
/ 27 марта 2011

Действительно, IDE не имеет к этому никакого отношения. И вы можете перефразировать это мнение, так как иногда полезная информация не всегда является последней выполненной строкой, но где-то глубже в трассировке стека (например: недопустимое значение передается методу, вплоть до n-го уровня, где происходит исключение. )

Eclipse не может изменить это поведение, так как это поведение JVM во время выполнения; когда исключение не перехватывается, System.err используется для вывода трассировки стека. Вы можете изменить это, заменив поток вывода ошибок .

PrintWriter, который вы установили, может сохранить оригинальную копию System.err и просто отбросить все, что вас не волнует (например, что-либо, совпадающее с "^\s*(java(x?)\.).*" или что-то в этом роде). Но обходной путь не стоит проблем ,

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...