Глобальное исключение ловушки

Предположим, что у меня есть устаревшее 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
    }
});