Глобальное исключение ловушки
Предположим, что у меня есть устаревшее Java-приложение с тысячами строк кода, которые делают:
try {
// stuff
} catch (Exception e) {
// eat the exception
}
Есть ли какой-либо глобальный параметр, который я мог бы перевернуть или сторонний JAR, который регистрировал бы все "съеденные" исключения? Я знаю, что могу сделать массивную замену find (поиск catch (Exception e) {и заменить его catch (Exception e) {logException (e);), но мне было интересно, было ли лучшее решение. Спасибо!
Ответы
Ответ 1
Возможно, вы можете предоставить свою собственную реализацию Exception
, которая регистрирует трассировку стека в конструкторе. На странице man java:
-Xbootclasspath: загрузочный путь к классам
Укажите список каталогов, JAR-архивов, разделенных двоеточиями, и ZIP-архивы для поиска файлов классов загрузки. Эти используется вместо файлов классов загрузки, включенных в Java 2 SDK.
Ответ 2
Похоже на место, где удобное программирование с ориентацией на аспекты. Вы можете настроить pointcut для обработчика исключений. Проверьте AspectJ для хорошей реализации AOP.
Ответ 3
Нет. Если код ловит исключение и ничего не делает с ним, то вы ничего не можете изменить, не изменяя код.
Находка-замена должна работать. Тем не менее, я также настоятельно рекомендую проверить его с помощью FindBugs, чтобы убедиться, что вы нашли все экземпляры этой проблемы. (FindBugs все равно должен быть частью вашего процесса, но я просто указываю на это, если кто-то, кто читает это, еще не использует его.)
Ответ 4
Это позволит вам обрабатывать любые неперехваченные исключения:
Thread.setDefaultUncaughtExceptionHandler(
new Thread.UncaughtExceptionHandler(){
public void uncaughtException(Thread t, Throwable e) {
//handle the exception
}
});