2010-05-12 13 views
10

Supongamos que tengo una aplicación java legado con miles de líneas de código que hacen:A nivel mundial Entrar captura de excepciones e

try { 
    // stuff 
} catch (Exception e) { 
    // eat the exception 
} 

¿Hay alguna opción global que podría voltear o tercera JAR partido que registrar todo " comido "excepciones? Sé que podría hacer un reemplazo masivo de buscar (buscar captura (Excepción e) {y reemplazarlo por captura (Excepción e) {logException (e);) pero me preguntaba si había una mejor solución. ¡Gracias!

Respuesta

7

Quizás podría proporcionar su propia implementación de Exception que registra la pila -traza en el constructor. Desde la página del manual de java:

-Xbootclasspath: bootclasspath
especificar una lista separada por comas de los directorios, archivos JAR, y ZIP archivos para buscar archivos de clase de arranque. Estos son utilizados en lugar de los archivos de clase de arranque incluidos en Java 2 SDK.

+0

+1 esa es una idea interesante. – Finbarr

+0

Me gusta. Es furtivo, y podría funcionar. –

+0

Probablemente no sea para los débiles de corazón. – Raedwald

0

No. Si el código detecta la excepción y no hace nada con ella, entonces no hay nada que pueda hacer para cambiar eso sin cambiar el código.

Un find-replace debería funcionar. Sin embargo, también recomendaría verificarlo con FindBugs para asegurarse de que encontró todas las instancias de este problema. (FindBugs debería ser una parte de su proceso de todos modos, pero solo lo estoy señalando en caso de que alguien que lea esto ya no lo use.)

+0

La Programación Orientada a Aspectos le permite registrar excepciones sin cambiar el código original, como señaló Rob Di Marco en su respuesta (http://stackoverflow.com/questions/2820259/globally-log-catch-exception-e/2820381# 2820381). – markusk

+0

@markusk: punto tomado; en realidad hay varias formas de hacerlo. Dejé esta respuesta principalmente para la parte FindBugs. –

+0

En ese caso, ¿por qué no eliminar el primer párrafo de su respuesta? Su recomendación de FindBugs aún es útil. – markusk

0

Esto le permitirá manejar las excepciones no capturadas:

Thread.setDefaultUncaughtExceptionHandler(
    new Thread.UncaughtExceptionHandler(){ 
    public void uncaughtException(Thread t, Throwable e) { 
     //handle the exception 
    } 
}); 
+0

Pero eso no es lo que él pide. – aioobe

+1

Buena respuesta a la pregunta incorrecta. Las excepciones con las que se enfrenta el OP están atrapadas, no sin descubrir –

5

parece ser un lugar donde programación orientada a aspectos podría ser útil. Puede configurar un punto de corte de manejador de excepciones. Consulte AspectJ para obtener una buena implementación de AOP.

+0

Idea interesante ... – JoeGeeky

Cuestiones relacionadas