Trouver d'où part une exception (par exemple déréférencement d'un null)
2 réponses
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<---
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?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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() ; ... }
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() ;
...
}
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() ; ... }
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() ; ... }
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() ;
...
}
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() ; ... }