jvm 使用ByteBuddy代理重新定义Spigot类时出现VerifyError

ifmq2ha2  于 2022-11-07  发布在  Pig
关注(0)|答案(1)|浏览(302)

我正在尝试重新定义spigot中的CraftPlayer类来添加更多的事件。我正在使用Byte-Buddy和ASM来编辑this实用程序类中的类。然而,即使运行CraftPlayer::class.java.redefine { }(它根本不改变类),我也会得到一个java.lang.VerifyError,没有任何消息。
我试过在其他大型复杂类上运行同样的代码,但没有得到错误。这些类和CraftPlayer的唯一区别是它们没有任何内部类。
完整例外:

java.lang.VerifyError: null
        at sun.instrument.InstrumentationImpl.redefineClasses0(Native Method) ~[?:?]
        at sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:194) ~[?:?]
        at xyz.xenondevs.lib.bytebase.RuntimeUtilsKt.insertInstructions$redefineClasses(RuntimeUtils.kt:41) ~[?:?]
        at xyz.xenondevs.lib.bytebase.RuntimeUtilsKt.access$insertInstructions$redefineClasses(RuntimeUtils.kt:1) ~[?:?]
        at xyz.xenondevs.lib.bytebase.RuntimeUtilsKt$insertInstructions$2.invoke(RuntimeUtils.kt:41) ~[?:?]
        at xyz.xenondevs.lib.bytebase.RuntimeUtilsKt$insertInstructions$2.invoke(RuntimeUtils.kt:41) ~[?:?]
        at xyz.xenondevs.lib.bytebase.RuntimeUtilsKt$sam$java_util_function_Consumer$0.accept(RuntimeUtils.kt) ~[?:?]
        at java.util.ArrayList.forEach(ArrayList.java:1511) ~[?:?]
        at xyz.xenondevs.lib.bytebase.RuntimeUtilsKt.insertInstructions(RuntimeUtils.kt:41) ~[?:?]
        at xyz.xenondevs.test.TestPlugin.onEnable(TestPlugin.kt:11) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[spigot-1.17.1.jar:3241-Spigot-6c1c1b2-1492826]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:342) ~[spigot-1.17.1.jar:3241-Spigot-6c1c1b2-1492826]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:480) ~[spigot-1.17.1.jar:3241-Spigot-6c1c1b2-1492826]
        at org.bukkit.craftbukkit.v1_17_R1.CraftServer.enablePlugin(CraftServer.java:511) ~[spigot-1.17.1.jar:3241-Spigot-6c1c1b2-1492826]
        at org.bukkit.craftbukkit.v1_17_R1.CraftServer.enablePlugins(CraftServer.java:425) ~[spigot-1.17.1.jar:3241-Spigot-6c1c1b2-1492826]
        at net.minecraft.server.MinecraftServer.loadWorld(MinecraftServer.java:619) ~[spigot-1.17.1.jar:3241-Spigot-6c1c1b2-1492826]
        at net.minecraft.server.dedicated.DedicatedServer.init(DedicatedServer.java:266) ~[spigot-1.17.1.jar:3241-Spigot-6c1c1b2-1492826]
        at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1010) ~[spigot-1.17.1.jar:3241-Spigot-6c1c1b2-1492826]
        at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:305) ~[spigot-1.17.1.jar:3241-Spigot-6c1c1b2-1492826]
        at java.lang.Thread.run(Thread.java:831) [?:?]

我正在运行Java 16 build 16.0.1+9-24
为什么JVM无法验证CraftPlayer类,即使没有任何更改?

vuv7lop3

vuv7lop31#

似乎是一个JVM/ASM错误。刚刚用Java 17和更新的依赖关系再次尝试,但完全相同的代码,它现在似乎正在工作。

相关问题