Trouver d'où part une exception (par exemple déréférencement d'un null)

2 réponses
Avatar
Vincent Belaïche
Bonjour,

Je suis nouveau en Java. Récemment j'ai corrigé un bug dans lequel j'appelais
un méthode sur un objet dont la référence valait null (donc sur pas d'objet du
tout, c'était ça le bug).

Comme je savais où chercher j'ai trouvé assez rapidement avec le debogueur jdb
(j'utilise l'environnement jdee). Ma question c'est plutôt dans le cas
général, comment quand une exception de ce genre se déclenche trouver
l'endroit où ça s'est produit.

Dans jdb quand ça se produit on obtient ce genre de sortie:


---8<------8<------8<------8<------8<------8<------8<------8<------8<---
main[1] cont
>
Exception occurred: java.lang.NullPointerException
(uncaught)"thread=AWT-EventQueue-0", java.awt.EventDispatchThread.run(),
line=156 bci=152

AWT-EventQueue-0[1]
---8<------8<------8<------8<------8<------8<------8<------8<------8<---

Là si je tape `wherei' voici ce que ça produit:

---8<------8<------8<------8<------8<------8<------8<------8<------8<---
wherei
[1] java.awt.EventDispatchThread.run (EventDispatchThread.java:156), pc = 152
---8<------8<------8<------8<------8<------8<------8<------8<------8<---

Ca ne m'aide pas beaucoup : n'y a-t-il pas moyen de revenir au thread d'où est
partie l'exception et de retrouver la ligne dans le code source correspondant?

Merci d'avance,

Vincent.

2 réponses

Avatar
yliur
Il n'y a pas de console où afficher des sorties dans ton programme ?
- Soit ton exception n'est pas capturée et sa pile d'appels s'affiche
dans la console.
- Soit tu captures l'exception avec un try/catch et tu peux écrire
quelque chose comme ça pour afficher la pile d'appels qui a mené à
l'exception :
try
{
...
}
catch (Exception e)
{
e.printStackTrace() ;
...
}
Avatar
Vincent Belaïche
Salut,

Merci, en fait je n'y ai tout simplement pas pensé du tout, mais la sortie
d'erreur était redirigée vers un fichier, où ce genre d'info apparaissait.

Merci !
Vincent.

yliur a écrit :
Il n'y a pas de console où afficher des sorties dans ton programme ?
- Soit ton exception n'est pas capturée et sa pile d'appels s'affiche
dans la console.
- Soit tu captures l'exception avec un try/catch et tu peux écrire
quelque chose comme ça pour afficher la pile d'appels qui a mené à
l'exception :
try
{
...
}
catch (Exception e)
{
e.printStackTrace() ;
...
}