2008-11-06 7 views
0

J'ai essayé d'analyser les exceptions Java qui apparaissent dans un journal pour du code avec lequel je travaille. Ma question est la suivante: est-ce que vous analysez la trace de l'exception de haut en bas ou de bas en haut? Il ressemble à ceci:Comment aborder le débogage à partir d'une entrée du journal des exceptions 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] 

Quelque chose comme ça. Évidemment, je ne cherche pas la réponse à cette exception spécifique, mais comment allez-vous analyser une trace d'exception comme ceci? Est-ce que vous commencez à l'erreur de niveau supérieur, ou commencez-vous à l'erreur la plus interne (sous les clauses "causées par")?

Le problème est plus difficile pour moi parce que je ne travaille pas avec le code que j'ai écrit. Je suis en train d'éditer les configurations XML, donc je ne regarde même pas vraiment le code Java. Dans mon propre code, je reconnaîtrais les endroits dans la trace et saurais quel genre de choses rechercher. Alors, comment abordez-vous une exception comme celle-ci en général?

Répondre

1

Dans votre exemple particulier, il y a une classe manquante. Dès que vous voyez une erreur comme celle-là, vous savez ce qui doit être corrigé (soit en corrigeant le nom de la classe, soit en mettant à jour le classpath pour que la classe puisse être trouvée).

En général, cependant, je regarde de mon code vers le code généré jusqu'à ce que je trouve l'erreur. Si j'obtiens une exception NullPointerException, par exemple, je vérifie si elle est provoquée par l'une de mes classes. Si c'est une classe manquante, cependant, je ne trouverai rien de mal avec mes propres classes, donc je vais commencer à l'autre extrémité de la trace de la pile et chercher une erreur reconnaissable.

2

Ce truc est un peu difficile à expliquer, mais ma première étape commence presque toujours par le haut et écrémé jusqu'à ce que je vois le com.mycompany.myproject familier. Compte tenu du numéro de ligne attaché à ce que vous avez un lieu de travail à partir de votre propre code, ce qui est souvent un bon début.

Edit: Mais, en relisant votre question, vous dites que ce n'est pas votre code .. donc ce ne peut pas être une réponse utile à tous ..

+0

Oui, la trace de pile est géniale dans mon propre code, parce que je vois la pile d'appels et j'obtiens de bonnes informations. Mais dans ce cas, le code devrait être ok. J'ai fait quelque chose à la configuration qui a causé l'exception, et je ne sais pas par où commencer le traçage. –

1

Dans votre exemple, il semble que vous ayez besoin d'ajouter un pilote Oracle JDBC ou quelque chose au classpath de votre projet.

Mais dans l'esprit de la question, je pense que cela dépend. Dans cet exemple, Spring n'est pas très utile en lui-même - erreur de création de bean. Gee, merci pour cette information. Cependant, il vous indique exactement pourquoi une erreur est survenue lors de la création d'un bean. L'exception "la plus intérieure".

J'ai vu d'autres exemples où l'exception la plus interne sera trop spécifique (comme un NPE) alors qu'à l'extérieur l'exception qui était réellement lancée avait le message d'erreur le plus utile. Cela varie d'un projet à l'autre.

Questions connexes