Как приступить к отладке, начиная с записи журнала исключений Java?

Я пытался проанализировать исключения Java, которые появляются в журнале для некоторого кода, с которым я работаю. У меня вопрос: вы анализируете трассировку исключения сверху вниз или снизу вверх? Это выглядит примерно так:

ERROR [main]</b> Nov/04 11:03:19,440 [localhost].[/BookmarksPortlet].[] - Exception sending context...
org.springframework.beans.factory.BeanCreationException: Error creating bean...: Cannot Resolve reference...: Error creating bean... nested exception... nested exception is org.hibernate.HibernateException: Dialect class not found: org.hibernate.dialect.Oracle10gDialect
Caused by:
... [similar exceptions and nested exceptions]
...
    at [start of stack trace]

Что-то вроде того. Очевидно, я не ищу ответа на это конкретное исключение, но как вы подойдете к синтаксическому анализу трассировки исключения, подобного этой? Вы начинаете с ошибки верхнего уровня или начинаете с самой внутренней ошибки (в разделе «вызвано»)?

Для меня проблема сложнее, потому что я не работаю с написанным мной кодом. Я редактирую конфигурации XML, поэтому я даже не смотрю код Java. В моем собственном коде я бы распознал местоположения в трассировке и знал бы, что искать. Итак, как вы вообще подходите к подобному исключению?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
728
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это немного сложно объяснить, но мой первый шаг - это почти всегда начинать сверху и скользить вниз, пока я не увижу знакомый com.mycompany.myproject.

Учитывая номер строки, прикрепленной к нему, у вас есть место для работы в собственном коде, что часто является хорошим началом.

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

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

Jonathan Adelson 06.11.2008 21:44
Ответ принят как подходящий

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

Однако в целом я смотрю от своего кода к сгенерированному коду, пока не найду ошибку. Например, если я получаю исключение NullPointerException, я проверяю, не вызвано ли оно одним из моих классов. Однако, если это отсутствующий класс, я не найду ничего плохого в моих собственных классах, поэтому я начну с другого конца трассировки стека и поищу узнаваемую ошибку.

В вашем примере похоже, что вам нужно добавить какой-то драйвер Oracle JDBC или что-то еще в путь к классам вашего проекта.

Но в духе вопроса, я думаю, это зависит от обстоятельств. В этом примере Spring сам по себе не очень полезен - ошибка при создании bean-компонента. Ну и дела, спасибо за эту информацию. Однако он точно сообщает вам, ПОЧЕМУ произошла ошибка при создании bean-компонента. «Самое внутреннее» исключение.

Я видел другие примеры, в которых самое внутреннее исключение было бы слишком конкретным (например, NPE), в то время как внешнее исключение, которое было фактически сгенерировано, имело наиболее полезное сообщение об ошибке. Это варьируется от проекта к проекту.

Другие вопросы по теме