Суть проблемы следующая:
Есть класс, с большим количеством разных методов, с большим количеством вложенностей (которые тоже полны методов). Многие из них могут вызвать эксепшены. Эксепшены не пробрасываются, почти всегда обрабатываются на месте (выше обозначенного класса практически ни один не выбрасывает).
Как с минимальным вмешательством в код выловить информацию о всех исключениях (вместе со стеком)?
Возможно обернуть в другой класс? Если да, то как сделать что бы гарантированно я мог узнать о всех эксепшенах?
Ответ
Если нет возможности изменить исходный код или это очень сложно, то можно использовать модификацию байткода (bytecode instrumentation).
Например с помощью библиотеки ASM и метода MethodVisitor.visitTryCatchBlock найти все блоки try\catch и модифицировать их таким образом, чтобы все исключения перед обработкой сохранялись в некоторую структуру данных или выводились в лог.
Комментариев нет:
Отправить комментарий