2011-03-01 4 views
9

Estoy usando una biblioteca de terceros en mi aplicación Java. Esta biblioteca de terceros arroja una excepción personalizada no detectada en cada inicio de aplicación. La excepción es inofensiva y solo se usa para fines de registro internos de la biblioteca de terceros. Como esta excepción no se detecta, hace que mi Eclipse IDE cambie a la perspectiva de depuración y suspenda la ejecución de la secuencia cada vez que inicie la aplicación para informarme del problema. Tengo que decirle manualmente a Eclipse que ignore esto y simplemente reanude la depuración todo el tiempo. Esto es muy molesto No puedo cambiar la biblioteca de terceros para solucionar este problema.¿Cómo ignorar el tipo específico de excepción no detectada en Eclipse?

¿Hay alguna manera de decirle al Eclipse IDE que ignore un tipo específico de excepción no detectada?

Intenté "Filtrar por pasos" pero (creo) ya que la excepción personalizada no detectada no se encuentra en el seguimiento de la pila, no se está filtrando desde el depurador. Esta es mi primera incursión en el filtrado de pasos para poder usarlo mal. Aquí hay un rastro de pila de muestra.

EDIT:

trabajo de jluzwick alrededor de utilizar nuestro propio registrador para ver las excepciones no capturadas después de desactivar todas las excepciones no capturadas en Eclipse podría funcionar técnicamente pero no es ideal y es posible que podríamos perder las cosas si nuestro logger está roto.

La solución de mazaneicha parecía estar en el camino correcto pero no pude hacer que funcionara exactamente de la manera que quería. Esto puede deberse a un error del usuario de mi parte.

jluzwick y mazaneicha ambos tenían posibles soluciones a este problema, pero Konstantin Komissarchik tenía la respuesta "correcta" en el sentido de que esto debería ser devuelto a los creadores de la biblioteca para solucionarlo. A veces, una solución técnica no es la correcta.

Respuesta

11

Un hilo antiguo, pero pensé que le agregaría un poco.

En al menos Eclipse Indigo: En la depuración perspectiva-> vista Puntos de interrupción:

  1. Especifique un punto de interrupción de excepciones (y potencialmente subclases) que desea hacer una pausa en. Esto se hace haciendo clic en "Agregar punto de corte de excepción de Java". Un icono que es una J y un signo de exclamación.
  2. Haga clic derecho en el punto de interrupción y seleccione "Breakpoint Properties"
  3. Ir a "Filtrado"
  4. especificar la clase o paquetes que desea ignorar. Esto los agregará a la lista. Sólo asegúrese de desmarcar a delimitar que es exclusiva (no se detienen en la ubicación especificada)

que tienden a utilizar esto para que pueda especificar NullPointerExceptions como un punto de interrupción de excepción general, pero ignoran los paquetes que son de la tercera bibliotecas de fiestas

+0

en mi opinión, esta es una mejor respuesta que la seleccionada. Notaré que no tuve mucha suerte excluyendo por "clase" y en su lugar tuve que recurrir al uso de exclusiones basadas en "paquetes" (Eclipse Galileo). gracias @Jeff! –

+0

"Un viejo hilo [...]" ¿Y qué? No te preocupes por los gimoteos idiotas que puedes tener cuando aportas algo ÚTIL, VALIOSO a una vieja discusión. – async

2

Recomendaría intentar resolver esto en código en su lugar. Encuentra el lugar en tu código en el que estás inicializando esta biblioteca y capta esta excepción en lugar de dejar que se propague por la pila, lo que no se considera un comportamiento "normal".

+3

La biblioteca genera su propio grupo de subprocesos donde se produce esta excepción. No puedo simplemente envolver la inicialización de la biblioteca en un try/catch. No tengo control sobre la pila de llamadas donde ocurre la excepción. – Tansir1

+1

Tienes un problema entonces. Recomiendo contactar al proveedor de la biblioteca y reportar un error. Incluso si configura su sesión de depuración para ignorar este problema, aún estará allí en tiempo de ejecución/producción. No puede decirle a Eclipse en tiempo de ejecución que ignore las excepciones no detectadas. Van directamente al registro de errores. –

+4

Esto está dividiendo pelos, pero puedes decirle a Eclipse que ignore TODAS las excepciones no detectadas. Esperaba encontrar una forma de ignorar un tipo específico. Se puede hacer yendo a Windows-> Preferencias-> Java-> Depurar y desmarcar "Suspender ejecución en excepciones no detectadas". Esta es una idea muy mala, pero se puede hacer. No pensé que tuviera opciones, pero pensé que no estaría de más preguntar aquí. Gracias por la ayuda. – Tansir1

1

¿Has probado esto?

Ir a Window-> Preferencias> Java> Depuración

En "suspender ejecución" desmarque "suspender ejecución de excepciones no capturadas"

No estoy seguro de que hay una manera de desactivar excepciones específicas , Pero podría estar equivocado. Posiblemente haya un complemento que lo haga.

+0

Como dijiste, no funciona para excepciones específicas. Eso hace que Eclipse los ignore a todos. Todavía quiero que capte todo lo demás para encontrar problemas en mi propio código. – Tansir1

+0

@ Tansir1 ¿Aún así se informarán sus excepciones no detectadas a través de su registrador? Si nota que se lanza una de sus propias excepciones, puede configurar un punto de quiebre desde donde se lanzará. – jluzwick

1

En la perspectiva de depuración, vista de puntos de interrupción, haga clic en los puntos de interrupción de excepción de Java (un icono con una letra minúscula J y un signo de exclamación, J!). En la ventana que aparece Agregar punto de excepción de Java, puede encontrar su molesta excepción y desmarcar la casilla "Suspender en excepción no detectada".

0

Parece que necesita un simple intento, atrapa.

MyException e = new MyException; 
try { 
     throw new e; 
} catch (MyException e) { 
     e.printStackTrace(); 
} 

Esto permitirá lanzar la excepción, pero ignorará y permitirá que el programa continúe. Si desea que se registre en un archivo, use 'PrintWriter.println (e.printStackTrace());'

Espero que hayas conseguido lo que necesitabas, ¡y feliz codificación!

+0

Ver comentarios a la respuesta de Konstantin Komissarchik. No tenía control sobre la pila de llamadas, así que no podía simplemente ajustar la excepción de esa manera. Estaba en una biblioteca de terceros, no en mi propio código. – Tansir1

Cuestiones relacionadas