使用Instrumentation记录未处理的异常

 四季汤料_788 发布于 2023-02-13 19:50

我试图使用instrumentation调试java应用程序.当前系统的问题是

几乎没有写任何日志声明

恶劣的异常处理

这使得很难追溯功能损坏的根本原因.

为了处理这种情况,我开发了工具,使用InstrumentationAPI的java代理,我能够注入日志语句,并解决了一半的问题.

但下一个问题是记录异常.我想扩展我的工具记录在应用程序执行期间抛出的每个异常.我尝试使用注入"的try-catch"块javaassist为方法API(使用addCatch,insertBeforeinsertAfter),并且它是有效的一定程度.

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在值为searchnull 时吃,我从来不知道这个异常和应用程序失败了.

最终我想要的是记录应用程序抛出的任何异常的机制.以下详细信息将被捕获

例外类型

Excpetion Stacktrace

方法和类名

我知道有API Thread.setDefaultUncaughtExceptionHandler,但不确定它如何与java检测一起使用.我没有任何源访问该应用程序.

[更新1]

我发现下面链接告诉使用retransformation,我会试一试并更新

如何检测java系统类?

任何指导都会有很大帮助.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有