1 votes

Serait-il utile d'inclure le nom de la classe et le nom de la variable dans tout message de NullPointerException ?

Serait-il utile d'inclure le nom de la classe et le nom de la variable dans tout message de NullPointerException ? Je sais que ce n'est pas toujours possible en raison des modifications apportées par un JIT, mais il me semble que ces informations devraient être souvent disponibles (membres de la classe, etc.).

De : http://jamesjava.blogspot.com/2005/04/what-was-null.html

2voto

Milhous Points 6362

Cela dépend. Si vous obtenez la trace de la pile, il est clair quelle classe a déclenché l'exception. Cela conduit généralement à s'assurer que votre environnement vous donnera des traces de pile lorsqu'il y a des exceptions non manipulées.

1voto

Statement Points 1043

Fournir autant d'informations que possible lors d'erreurs est une bonne chose... N'est-ce pas ?

Ça aide à traquer les bogues.

Edit : (Oui)

0voto

Roy Tang Points 2077

Oui, ce serait utile. En particulier si vous disposez d'un mécanisme où le message d'erreur (exception.getMessage()) est affiché à l'écran, mais où le suivi de pile réel est caché dans des fichiers journaux auxquels vous ne pouvez pas accéder immédiatement.

0voto

Non, je ne pense pas du tout que cela soit "utile".

Au contraire, vous devez veiller à ne pas lancer de NPE en premier lieu. Vérifiez vos valeurs avant de les utiliser ( null validation) et autres. Cela devrait se produire antes de vous appelez une méthode de bibliothèque et après vous obtenez un résultat (si l'API spécifie que la méthode peut renvoyer un résultat) null . Bien sûr, il arrive qu'il le fasse quand même, mais c'est alors un bug).

Si vous pensez que les NPE doivent porter ces informations pour le débogage, détrompez-vous. C'est à cela que servent les débogueurs. Une exception est simplement là pour vous informer que quelque chose a mal tourné. N'oubliez pas que les exceptions non vérifiées se produisent au moment de l'exécution - et doivent être générées à ce moment-là. Pour que l'exception sache quelle variable contenu null le octet code devrait connaître les noms de variables. Vous ne voulez pas alourdir votre code d'octet avec ce genre de choses. Le nom de la classe est contenu dans chaque sortie de logging que je reçois de mes programmes. C'est à ça que sert la journalisation.

Java facilite déjà grandement le processus de débogage en vous donnant le numéro de ligne et la trace complète de la pile. Les programmes C échouent avec Segmentation fault . Vous devez utiliser strace ou un débogueur afin d'obtenir autant d'informations.

Notez que javac fait inclure une option de compilation pour inclure des informations sur le fichier source au moment de la compilation, mais ceci est destiné à être utilisé par un débogueur, pas les exceptions aléatoires qui sont lancées. En citant Sun javac page de manuel :

             -g Generate all debugging information, including local variables.
                By default, only line number and  source  file information is 
                generated.

             -g:none
                Do not generate any debugging information.

             -g:{keyword list}
                Generate  only  some  kinds  of debugging information, specified 
                by a comma separated list of keywords. Valid keywords are:

                source  
                   Source file debugging information

                lines
                   Line number debugging information

                vars
                   Local variable debugging information

Pour faire court : utilisez un débogueur.

-1voto

Art Points 1

Lancez-vous une NullPointerException ? Je pense que vous devriez probablement faire une validation de nullité dans le code. J'envisagerais également d'utiliser des outils de journalisation open source comme Log4J.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X