开发者社区> 问答> 正文

ObjectReader_1是构造出来的类,我想debug看它里面的方法例如readObject这个

我想学习一下fastJson2的内部具体实现,但是这里objectReader是手动构造出来的,没办法debug进入它的方法,不知道有没有什么办法可以debug里面,谢谢了。

提问42.png

我的目的是想debug进readObject这个方法

原提问者GitHub用户ocean23

展开
收起
飘飘斯嘉丽 2023-04-21 12:02:15 217 0
2 条回答
写回答
取消 提交回答
  • 值得去的地方都没有捷径

    在这种情况下,我们可以尝试使用反射技术来调用私有方法,并修改代码中objectReader相应的部分。以下是一个示例用于调用私有方法:

    import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;

    public class Main {

    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    
        ObjectReader objectReader = new ObjectReader();
    
        // 获取到 readObject 方法
        Method readObjectMethod = objectReader.getClass().getDeclaredMethod("readObject", String.class);
    
        // 设置方法可访问
        readObjectMethod.setAccessible(true);
    
        // 调用私有方法
        Object result = readObjectMethod.invoke(objectReader, "test"); // 在这里传递你需要的参数
    
        // 输出结果
        System.out.println(result);
    }
    

    } 将这个代码片段替换到你的代码中,对应修改了objectReader相应的部分,使用这种方法调用"readObject"这个私有方法并传递需要的参数。然后你应该能够看到该方法的详细输出并找到你需要的问题。

    请注意,使用反射技术需要小心,因为它可能会影响到代码的可维护性和可移植性。请在实践中小心使用。

    2023-04-21 21:28:42
    赞同 展开评论 打赏
  • com.alibaba.fastjson2.reader.ObjectReaderCreatorASM 看这个类的代码

    ObjectReader1不是ObjectReader_1,如果要dump下来看,在com.alibaba.fastjson2.reader.ObjectReaderCreatorASM#createObjectReader里有这样的代码

    byte[] code = cw.toByteArray(); // 把这个byte数组写到一个文件就可以看到了

    原回答者GitHub用户wenshao

    2023-04-21 14:41:09
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载