¿Hay "Break on Exception" en IntelliJ?

318

¿Hay alguna función que interrumpirá automáticamente la depuración en la primera excepción?

Así que nosotros

  1. iniciar aplicación
  2. hacer algo que arroje una excepción
  3. consiguió IntelliJ apareció línea resaltada donde se produjo la excepción.
Mike Chaliy
fuente
Probablemente quieras romper solo en excepciones no atrapadas, ¿verdad?
David Ferenczy Rogožan

Respuestas:

367

Correr | Ver puntos de interrupción | Puntos de interrupción de excepción

Mike Chaliy
fuente
Desafortunadamente, he descubierto que en la práctica (con datos grandes), las variables de cuadro que le interesan no siempre se cargan.
información
158

Una forma rápida de abrir el cuadro de diálogo es presionar Ctrl+ SHIFT+ F8(en Mac: Cmd+ SHIFT+ F8), luego hacer clic en la pestaña de puntos de interrupción de excepción. Si esa fue la última pestaña que estaba viendo, aún se seleccionará, lo que facilita el encendido y apagado de las excepciones.

Esto hará que IntelliJ se rompa en el punto del código (o código de la biblioteca) donde se produjo la excepción. Específicamente, obtienes una 'primera oportunidad' en el manejo de excepciones, antes de que la pila se camine buscando bloques de captura / finalmente para ejecutar.


SUGERENCIA: Java tiende a generar muchas excepciones internamente al cargar clases, por lo que esta interrupción en todas las excepciones puede volverse bastante tediosa. La buena noticia es que puede excluir ciertos tipos de excepción utilizando el campo de condición .

Por ejemplo:

!(this instanceof java.lang.ClassNotFoundException)

Puede encadenar múltiples condiciones de este tipo junto con &&.

ingrese la descripción de la imagen aquí

Drew Noakes
fuente
99
¿Hay alguna manera de decir "romper solo las excepciones de mi proyecto (no del sistema Java)"?
Malditas verduras
16
No olvides "Desactivado hasta que se alcanza el punto de interrupción seleccionado": este es increíble. Simplemente establezca un punto de interrupción en su código después de que todas las bibliotecas Java u otras se hayan cargado y configurado. Luego, elija su punto de interrupción del menú desplegable y espere. Su punto de interrupción se alcanzará, y luego, una vez que presione continuar, se activará su nuevo filtro de excepción Caught & Uncaught. :)
Louis St-Amour
1
No olvide marcar tanto "Excepción capturada" como "Excepción no capturada" en la parte inferior del cuadro de diálogo Puntos de interrupción.
Robino
59

En IntelliJ IDEA 14 vaya a:

Run -> View Breakpoints -> Check "Java Exceptions Breakpoints" -> Uncheck "Caught Exceptions"

Si no desmarca Caught Exceptionsla ejecución, se detendrá cada vez que Java Frameworklance una excepción interna.

Tonatio
fuente
1
Ejecutar -> Ver puntos de interrupción ... -> Marque "Puntos de interrupción de excepciones de Java" -> Desmarque "Excepciones de captura"
Jonas
2
Desafortunadamente, esto todavía se rompe en las excepciones detectadas para mí, incluso después de deshabilitar las "excepciones detectadas".
Carcigenicate
Esta es una información muy importante que diría, de lo contrario, es un infierno excepcional sin ningún valor de información. Principalmente cuando se usan grandes marcos como Grails.
David Ferenczy Rogožan
OK, he cambiado de opinión: ambas opciones, con y sin excepciones detectadas, son malas, porque generalmente, en una aplicación web típica, todas las excepciones suelen detectarse, hay un bloque de captura de nivel superior que detecta todo y lo formatea para que sea presentado al usuario. Entonces, sin las excepciones detectadas, no se rompe en nada, con ellos, se rompe cientos de veces durante una sola solicitud. Ambos inútiles :(
David Ferenczy Rogožan
Nada es inútil, si sabes cómo usarlo.
Alessandro Flati
12

Sí hay. Debe definir un punto de interrupción de excepción (puede ser "Cualquier excepción") en el cuadro de diálogo de puntos de interrupción en IntelliJ IDEA.

Las excepciones se pueden filtrar por condición o clase si lo desea, o por si está interesado en excepciones capturadas o no capturadas.

Avi
fuente
7

Si hace clic en el pequeño signo "+" en la esquina superior izquierda, puede agregar un nuevo punto de interrupción. Si selecciona Exception Breakpoint, aparece un pequeño cuadro de diálogo donde puede ingresar la clase de excepción para romper (en caso de que no quiera romper todas las excepciones).

koljaTM
fuente
0

En versiones más recientes en intellij en Ejecutar > Ver puntos de interrupción .

Luego verifique los puntos de interrupción de la excepción Java -> Cualquier excepción .

Una buena forma de depurar las excepciones es usar el paquete de la aplicación principal y el comodín .*. De esta manera, omite todas las demás excepciones de bibliotecas, ya que la mayoría de las veces busca excepciones lanzadas por su aplicación y no por ninguna otra biblioteca (que puede ser una gran cantidad de excepciones).

Como se muestra en la imagen que uso com.gs.mercury.*para romper cada vez que la aplicación lanza una excepción. Si usa excepciones para lo que son (para manejar casos excepcionales y no para manejar el flujo de situaciones normales) solo se detendrá cuando alcance la excepción deseada casi todo el tiempo.

PD. respuesta agregada solo para señalar el filtro de clase Catch bastante útil .

Puntos de corte

Jose Da Silva
fuente