solucionar gratis error descargar como cause java debugging nullpointerexception

java - gratis - Una buena manera de depurar nullPointerException



java lang nullpointerexception ireport (3)

Estoy usando eclipse y programando en java. A veces me encuentro con una nullPointerException que me atormentará durante horas. ¿Hay alguna forma de depurar nullPointerExceptions mejor y averiguar qué valores de variables son y otras cosas que podrían causar null Pointer Exceptions.


  1. Mientras que la depuración puede usar la vista de BreakPoints , para capturar los punteros nulos.

    Ventana -> Mostrar vista -> Puntos de interrupción

    En la vista hay un "J!" que le permite establecer puntos de interrupción en las excepciones. Puede establecer java.lang.NullPointerException . Entonces, una vez que se lanza la excepción de puntero nulo, puede verificar qué variable está causando nulo.

  2. Otra cosa que puedes hacer es capturar el posible acceso al puntero nulo mientras estás codificando. Por supuesto, no puede capturar todos los punteros nulos con esta configuración. Pero aún así es útil, establezca las siguientes configuraciones en su eclipse.

    Preferencias -> Java -> Compilador -> Errores / advertencias -> Análisis nulo


Hay algunas maneras de hacer que NullPointerException un problema menor:

  1. Utilice la anotación @Nullable .

  2. Pruebe los valores de los argumentos para null en constructores y definidores (evite los definidores en el código Java antiguo). Si haces esto mucho, podrías crear una plantilla de código fuente (Eclipse) para generar rápidamente el código. Esto se denomina "failfast": no espera a que se lance la excepción cuando el valor se usa más en el código, por ejemplo, después de almacenarlo en un campo.

  3. Asegúrese de realizar una cantidad mínima (por ejemplo, 1 o 2) de operaciones por línea. Si no lo hace, tendrá que averiguar dónde se produjo la NullPointerException la expresión de una sola línea.

  4. No utilice null en los campos para indicar el estado. En su lugar, utilice, por ejemplo, un enum State . Por ejemplo, no lo haga if (socket == null) { // not connected } ya que es fácil olvidarse de verificar el null más adelante. Un estado explícito no es tan fácil de olvidar.

  5. No inicialice las variables locales a null menos que sea explícitamente necesario. En realidad, si maneja su alcance y sus excepciones correctamente, debería poder marcar la mayoría de las variables como final . Reemplazar los printStacktrace() predeterminados de printStacktrace() con la throw new IllegalStateException("Unhandled program state", e) ayuda porque se ve como un punto de salida de un bloque de código.

Después de mucha programación, encontrará que el número de NullPointerException s bajará.


Mire la traza de la pila y lea el número de línea donde se produce la NullPointerException . Casi siempre, la línea tiene alguna invocación de método como

x.getValue()

Si x es null , obtienes una NullPointerException . Si el método en la parte superior del seguimiento de la pila no es su código, rastree la pila hasta que llegue a su código. Muy a menudo en este caso, está pasando null a un método que no le gustan null parámetros null . Encuéntralo y arréglalo.

Además, muy a menudo, cuando se encuentra con un método que no es tuyo que está lanzando una NullPointerException , lee la documentación. Por ejemplo, mire String.replace(CharSequence target, CharSequence replacement) :

Tiros

NullPointerException : si el target o el replacement son null .

¡No hay nada más claro que eso!

Aquí hay un ejemplo:

Mirando la línea 4, vemos foo.bar() . Esto implica que foo es null . Ese es fácil. Veamos otro ejemplo:

Rastreando a su código, vemos que s.replace(target, replacement) está lanzando. Debemos inspeccionar el target y el replacement . Adjuntemos un depurador:

Jajaja replacement es null . Puedes hacer lo mismo en Eclipse. Establezca un punto de interrupción para cuando se lance una excepción y úselo para inspeccionar los parámetros de su método. Soy primitivo aquí porque provengo de una escuela de pensamiento en la que realmente creo que todos estarían mejor si aprendieran a hacerlo de la manera más difícil. Fugas de abstracciones y todo eso.