Java 如何将内存中生成的类转储到文件

Java 如何将内存中生成的类转储到文件,java,reflection,Java,Reflection,我在生成的类sun.reflect.GeneratedMethodAccessor1548.invoke()中遇到一些异常。是否可以在运行时将其代码转储到文件或以某种方式浏览?它是一个有很多第三方lib的大型应用程序的一部分,我甚至不知道是哪个库首先生成了这个类 -- 最后一个堆栈跟踪是: java.lang.IllegalArgumentException: java.lang.ClassCastException@60b4bc67 at sun.reflect.GeneratedMe

我在生成的类
sun.reflect.GeneratedMethodAccessor1548.invoke()
中遇到一些异常。是否可以在运行时将其代码转储到文件或以某种方式浏览?它是一个有很多第三方lib的大型应用程序的一部分,我甚至不知道是哪个库首先生成了这个类

--

最后一个堆栈跟踪是:

java.lang.IllegalArgumentException: java.lang.ClassCastException@60b4bc67
    at sun.reflect.GeneratedMethodAccessor1548.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_51]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_51]
    at com.github.mustachejava.reflect.ReflectionWrapper.call(ReflectionWrapper.java:63) ~[compiler-0.8.13.jar:na]
    at com.github.mustachejava.reflect.ReflectionObjectHandler.unwrap(ReflectionObjectHandler.java:34) ~[compiler-0.8.13.jar:na]
    at com.github.mustachejava.reflect.guards.WrappedGuard.apply(WrappedGuard.java:33) ~[compiler-0.8.13.jar:na]
    at com.github.mustachejava.reflect.GuardedWrapper.guardCall(GuardedWrapper.java:40) ~[compiler-0.8.13.jar:na]
    at com.github.mustachejava.reflect.ReflectionWrapper.call(ReflectionWrapper.java:57) ~[compiler-0.8.13.jar:na]
    at com.github.mustachejava.reflect.GuardedBinding.get(GuardedBinding.java:66) ~[compiler-0.8.13.jar:na]
    at com.github.mustachejava.codes.DefaultCode.get(DefaultCode.java:105) ~[compiler-0.8.13.jar:na]
    ... 98 common frames omitted

(不再有“由”引起的跟踪)

该类由JVM生成,以优化反射的使用。这应该是错误的原因,除非JVM中存在错误,在这种情况下,您需要升级。这个方法调用的代码中很可能有bug。

那么我不知道如何保存它,因为您不知道它是在哪里生成的。是的,但是是否有用于转储加载类的API?还向问题添加了stacktrace。您可以转储由类加载器加载的类。然而,动态生成的类并不是以可以访问的方式存储的。Java7Update51并不特别旧。但是,如果反射代码中出现错误,即使可以访问字节码,也无法调试它。是的,我也这么认为,但通常情况下,我会得到InvocationTargetException,但由于某些原因,在本例中不是这样。此代码似乎是由sun.reflect.MethodAccessorGenerator生成的,是一个名为“”的反射优化。实际上,同一方法的前15次调用引发了一个更具描述性的异常
java.lang.IllegalArgumentException:object不是声明类的实例。所以不需要反编译这段代码。