¿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.

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


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í


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.


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.


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).


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.