Страницы

Поиск по вопросам

воскресенье, 12 мая 2019 г.

Как отловить exception если он обработан внутри и не пробрасывается? (Java)

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


Ответ

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

Комментариев нет:

Отправить комментарий