Я пытался проанализировать исключения 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. В моем собственном коде я бы распознал местоположения в трассировке и знал бы, что искать. Итак, как вы вообще подходите к подобному исключению?




Это немного сложно объяснить, но мой первый шаг - это почти всегда начинать сверху и скользить вниз, пока я не увижу знакомый com.mycompany.myproject.
Учитывая номер строки, прикрепленной к нему, у вас есть место для работы в собственном коде, что часто является хорошим началом.
Редактировать: Но, перечитывая свой вопрос, вы говорите, что это не ваш код ... так что это может быть вообще бесполезный ответ ..
В вашем конкретном примере отсутствует класс. Как только вы видите такую ошибку, вы знаете, что нужно исправить (либо исправить имя класса, либо обновить путь к классам, чтобы класс можно было найти).
Однако в целом я смотрю от своего кода к сгенерированному коду, пока не найду ошибку. Например, если я получаю исключение NullPointerException, я проверяю, не вызвано ли оно одним из моих классов. Однако, если это отсутствующий класс, я не найду ничего плохого в моих собственных классах, поэтому я начну с другого конца трассировки стека и поищу узнаваемую ошибку.
В вашем примере похоже, что вам нужно добавить какой-то драйвер Oracle JDBC или что-то еще в путь к классам вашего проекта.
Но в духе вопроса, я думаю, это зависит от обстоятельств. В этом примере Spring сам по себе не очень полезен - ошибка при создании bean-компонента. Ну и дела, спасибо за эту информацию. Однако он точно сообщает вам, ПОЧЕМУ произошла ошибка при создании bean-компонента. «Самое внутреннее» исключение.
Я видел другие примеры, в которых самое внутреннее исключение было бы слишком конкретным (например, NPE), в то время как внешнее исключение, которое было фактически сгенерировано, имело наиболее полезное сообщение об ошибке. Это варьируется от проекта к проекту.
Да, трассировка стека великолепна в моем собственном коде, потому что я вижу стек вызовов и получаю отличную информацию. Но в этом случае код должен быть в порядке. Я что-то сделал с конфигурацией, вызвавшей исключение, и не знаю, с чего начать трассировку.