Использование инструментов для записи необработанного исключения
Я пытался отладить Java-приложение с помощью инструментов. Проблема с текущей системой
Едва ли написаны какие-либо записи журналаПлохая обработка исключенийЭто сделало очень трудно отследить первопричину нарушенной функциональности.
Чтобы справиться с ситуацией, я разработал инструмент, Java-агент, использующийInstrumentation
API, и я смог ввести лог-операторы, и половина проблемы была решена.
Но следующая проблема заключается в записи исключения. Я хочу расширить свою запись инструмента на каждое исключение, сгенерированное во время выполнения приложения. Я пытался сделать инъекциюпопробуй поймать' блокировать с помощьюjavaassist
API для методов (используя,addCatch
insertBefore
а такжеinsertAfter
), и это в определенной степени эффективно.
public byte[] transform(ClassLoader loader,
String className,
Class classBeingRedefined,
ProtectionDomain protectionDomain,
byte[] classfileBuffer)
throws IllegalClassFormatException {
if (className.startsWith("com/alu/")) {
return insertLog(className, classBeingRedefined, classfileBuffer);
}
if(className.endsWith("Exception")){
System.out.println("============= exception occured "+className);
}
ВотinserLog(..)
Метод вставит необходимый лог-оператор и работает нормально, но когда есть исключение, он неПриходи к трансформатору.
Но проблема в том, что некоторые методы обрабатывают исключение внутри (даже без log / sysout).
например:
try {
if(search.equals("Category")){
//do operation
}
} catch (Exception e) {
}
Этот код естNullPointerException
когда значениеsearch
является нулевым, я никогда не знаю это исключение, и приложение перестало работать для чего-то еще.
В конечном итоге мне нужен механизм для записи любого исключения, выдаваемого приложением. следующие детали должны быть зафиксированы
Тип исключенияStacktrace ExcpetionМетод и название классаЯ знаю, что есть APIThread.setDefaultUncaughtExceptionHandler
, но не уверен, как это использовать с инструментарием Java. Я неНе иметь доступа к приложению из любого источника.
[обновление 1]
Я нашел ссылку ниже, чтобы использоватьretransformation
Я дам попробовать и обновить
Как использовать классы системы Java?
Любое руководство будет очень полезным.>