23 votes

Une bonne façon de déboguer les nullPointerException

J'utilise eclipse et je programme en java. Parfois, je tombe sur une nullPointerException qui me tourmente pendant des heures. Existe-t-il un moyen de mieux déboguer les nullPointerExceptions et de déterminer les valeurs des variables et d'autres choses qui pourraient causer des null Pointer Exceptions.

33voto

Jason Points 125291

Regardez la trace de la pile et lisez le numéro de la ligne où le message NullPointerException est lancé. Presque toujours, la ligne contient l'invocation d'une méthode telle que

x.getValue()

Si x es null vous obtenez un NullPointerException . Si la méthode en haut de la trace de la pile n'est pas votre code, remontez la pile jusqu'à ce que vous atteigniez votre code. Très souvent dans ce cas, vous passez null à une méthode qui n'aime pas null paramètres. Trouvez-le et réparez-le.

De plus, très souvent, lorsque vous rencontrez une méthode qui n'est pas la vôtre et qui lance un NullPointerException lisez la documentation. Par exemple, regardez String.replace(CharSequence target, CharSequence replacement) :

Jette :

NullPointerException - si target ou replacement es null .

On ne peut pas être plus clair que ça !

Voici un exemple :

enter image description here

En regardant la ligne 4, on voit foo.bar() . Cela implique que foo es null . Celui-là est facile. Prenons un autre exemple :

enter image description here

En remontant dans votre code, nous voyons que s.replace(target, replacement) est en train de lancer. Nous devrions inspecter target y replacement . Attachons un débogueur :

enter image description here

Aha ! replacement es null . Vous pouvez faire la même chose dans Eclipse. Définissez un point d'arrêt lorsqu'une exception est levée, et utilisez-le pour inspecter les paramètres de votre méthode. Je suis primitif ici parce que je viens d'une école de pensée où je crois sincèrement que tout le monde serait mieux s'il apprenait d'abord à faire les choses de la manière la plus dure. Les abstractions fuyantes et tout ça.

18voto

Jayamohan Points 5901
  1. Pendant le débogage, vous pouvez utiliser la fonction BreakPoints afin de capturer l'image nulle null.

    Fenêtre -> Afficher la vue -> Points d'arrêt

    Dans la vue, il y a un "J!" qui vous permet de définir des points d'arrêt sur exceptions. Vous pouvez définir java.lang.NullPointerException . Ainsi, une fois que l'exception du pointeur nul est levée, vous pouvez vérifier quelle variable est à l'origine de cette exception. null.

  2. Une autre chose que vous pouvez faire est de capturer l'accès éventuel à un pointeur nul pendant que vous codez. Bien sûr, vous ne pouvez pas capturer tous les pointeurs nuls en utilisant ce paramètre. Mais cela reste utile, définissez les paramètres suivants dans votre éclipse.

    Préférences -> Java -> Compilateur -> Erreurs/alertes -> Analyse des nuls

4voto

owlstead Points 22329

Il y a plusieurs façons de faire NullPointerException moins de problème :

  1. Utilisez le Annotation @Nullable .

  2. Tester les valeurs des arguments pour null dans les constructeurs et les setters (évitez les setters dans le bon vieux code Java). Si vous faites cela souvent, vous pouvez créer un modèle de code source (Eclipse) pour générer rapidement le code. C'est ce qu'on appelle le "failfast" - vous n'attendez pas que l'exception soit levée lorsque la valeur est utilisée plus loin dans le code, par exemple après l'avoir stockée dans un champ.

  3. Veillez à effectuer un nombre minimum (par exemple 1 ou 2) d'opérations par ligne. Si vous ne le faites pas, vous devrez trouver où, dans l'expression à une seule ligne, l'élément NullPointerException survenu.

  4. N'utilisez pas null dans les champs pour indiquer l'état. Utilisez plutôt, par exemple, un enum State . Par exemple, ne pas faire if (socket == null) { // not connected } car il est facile d'oublier de vérifier null plus tard. Un état explicite n'est pas si facile à oublier.

  5. Ne pas initialiser les variables locales à null sauf si cela est explicitement nécessaire. En fait, si vous gérez correctement la portée et les exceptions, vous devriez être en mesure de marquer la plupart des variables final . Remplacement de l'option par défaut printStacktrace() méthodes avec throw new IllegalStateException("Unhandled program state", e) aide parce qu'il est considéré comme un point de sortie d'un bloc de code.

Après beaucoup de programmation vous trouverez le nombre de NullPointerException descendent.

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