MixinErrorHandler

基本信息

属性 值
类名 io.github.legacymoddingmc.unimixins.compat.MixinErrorHandler
文件 module-compat/src/main/java/…/compat/MixinErrorHandler.java
行数 35
实现 IMixinErrorHandler
启用版本 Minecraft 1.7.10

功能

收集 mixin 应用期错误并归类存放,供崩溃报告输出。 与 EnhanceCrashReportsTransformer 配套: transformer 挂钩崩溃报告,本类提供要写进去的数据。

状态

private static Map<String, List<String>> caughtMixinErrors = new HashMap<>();

键是目标类名,值是错误消息列表(存 th.toString(),非 Throwable 本身)。 static 且非 final,无清理入口。

两个回调

回调 归类方式
onPrepareError(config, th, mixin, action) 遍历 mixin.getTargetClasses(),对每个目标类各记一次
onApplyError(targetClassName, th, mixin, action) 直接按 targetClassName 记一次

实现要点

⚠️ 两个方法都 return null —— 即把 ErrorAction 交回 Mixin 自行处理, 本类只记录、不干预 mixin 错误。 说「它会吞掉 mixin 错误」是错的;它是旁路记录器。

⚠️ onPrepareError 的归类粒度是 mixin.getTargetClasses() 的每个元素 —— 一个 mixin 若声明多个 target,同一条错误会被记多次(每个 target 一条)。 按「一 mixin 一条」去统计错误数会偏高。

⚠️ 存的是 th.toString() 字符串而非异常对象, 所以堆栈信息在此就丢失了 —— caughtMixinErrors 里没有可打印的 stack trace。

⚠️ 静态 Map 从不清理,长跑服务端会持续累积。 本类无 clear() 方法。

相关条目