Skip to content

Latest commit

 

History

History
254 lines (202 loc) · 5.74 KB

File metadata and controls

254 lines (202 loc) · 5.74 KB

项目重新评估报告 / Project Re-evaluation Report

📊 项目概况 / Project Overview

代码统计

  • Java 文件数: 13 个
  • 总代码行数: ~1,496 行
  • 主要组件:
    • 核心类: 5 个
    • Mixin 类: 3 个
    • 配置和工具: 5 个

架构评分

  • 代码质量: ⭐⭐⭐⭐☆ (4/5)
  • 线程安全: ⭐⭐⭐⭐⭐ (5/5)
  • 错误处理: ⭐⭐⭐⭐☆ (4/5)
  • 可维护性: ⭐⭐⭐⭐⭐ (5/5)
  • 性能: ⭐⭐⭐⭐☆ (4/5)

✅ 已完成的改进

  1. ✅ 修复暂停功能(runTick 注入)
  2. ✅ 配置系统
  3. ✅ 线程池和资源管理
  4. ✅ SRG 映射器改进
  5. ✅ Node.js 连接池和重试
  6. ✅ 构建成功

❌ 发现的问题

1. 日志捕获系统不工作 ⚠️ 严重

问题:

  • 当前的 MixinLogCapture 只是一个占位符
  • captureLog() 方法是空的,没有实际捕获任何日志
  • 无法区分日志级别(INFO/WARN/ERROR/FATAL)

影响:

  • mc_get_logs 命令返回空结果
  • 无法监控游戏运行时的警告和错误
  • 调试功能大打折扣

2. 错误捕获不够全面

问题:

  • 只捕获 Minecraft.stop() 调用
  • 不捕获运行时异常
  • 缺少异常来源追踪

3. 缺少日志持久化

问题:

  • 所有日志只在内存中
  • 游戏重启后丢失
  • 无法查看历史日志

🎯 改进计划

优先级 1: 修复日志捕获系统 ⚠️

目标: 实现真正的日志拦截和分级存储

方案:

  1. 使用 Mixin 拦截 Log4j 的 logMessage 方法
  2. 按级别分类存储(WARN/ERROR/FATAL)
  3. 写入独立的缓存文件
  4. 提供 MCP 命令查询不同级别的日志

实现:

  • 创建 LogLevelCache.java - 分级日志缓存管理
  • 改进 MixinLogCapture.java - 真正拦截日志
  • 添加文件持久化(可选)
  • 新增 MCP 命令: mc_get_warns, mc_get_errors, mc_get_fatals

优先级 2: 改进错误捕获

目标: 捕获所有未处理的异常

方案:

  1. 添加全局异常处理器
  2. 捕获线程异常
  3. 记录异常上下文(时间、线程、堆栈)

优先级 3: 性能监控增强

目标: 更详细的性能指标

方案:

  1. TPS 监控
  2. 渲染性能
  3. 网络性能
  4. 实体性能分析

📋 详细改进清单

A. 日志系统重构 ✨ 新功能

1. 创建分级日志缓存

LogLevelCache.java
- WARN 缓存 (100 )
- ERROR 缓存 (100 )  
- FATAL 缓存 (50 )
- 时间戳记录
- 线程信息
- 日志来源

2. 改进 Mixin 日志拦截

MixinLogCapture.java
- 拦截 logMessage() 方法
- 提取日志级别
- 提取日志内容
- 分发到对应缓存

3. 新增 MCP 命令

- mc_get_warns - 获取 WARN 级别日志
- mc_get_errors - 获取 ERROR 级别日志
- mc_get_fatals - 获取 FATAL 级别日志
- mc_get_logs_by_level <level> - 按级别查询
- mc_clear_logs <level> - 清除指定级别日志

B. 错误捕获增强

1. 全局异常处理器

GlobalExceptionHandler.java
- 捕获未处理异常
- 记录异常上下文
- 分类存储

2. 线程异常监控

ThreadExceptionMonitor.java
- 监控所有线程
- 捕获线程崩溃
- 记录线程状态

C. 性能监控增强

1. TPS 监控

TPSMonitor.java
- 实时 TPS 计算
- TPS 历史记录
- 卡顿检测

2. 性能分析器

PerformanceProfiler.java
- 方法耗时统计
- 热点分析
- 性能报告

🔧 技术方案

日志拦截实现

方案 1: Mixin 拦截 (推荐) ✅

优点:

  • 直接拦截 Log4j
  • 性能开销小
  • 可以获取完整信息

实现:

@Mixin(value = AbstractLogger.class, remap = false)
public class MixinLogCapture {
    @Inject(method = "logMessage", at = @At("HEAD"), remap = false)
    private void captureLog(String fqcn, Level level, Marker marker, 
                           Message message, Throwable t, CallbackInfo ci) {
        LogLevelCache.addLog(level, message.getFormattedMessage(), t);
    }
}

方案 2: Appender (备选)

优点:

  • 不需要 Mixin
  • 更标准的方式

缺点:

  • 需要修改 Log4j 配置
  • 可能被其他 mod 影响

缓存存储方案

内存缓存 (当前)

- 使用 LinkedList
- 固定大小
- 快速访问

文件缓存 (可选)

- 写入 logs/debug/ 目录
- 按日期分文件
- 支持历史查询

📈 预期改进效果

功能完整性

  • 当前: 60% (暂停、性能、世界检查可用)
  • 改进后: 95% (日志、错误、性能全面可用)

调试能力

  • 当前: 中等(缺少日志监控)
  • 改进后: 强大(完整的日志和错误追踪)

用户体验

  • 当前: 需要手动查看日志文件
  • 改进后: 通过 Claude Code 直接查询

🎯 实施步骤

第一阶段: 日志系统 (1-2小时)

  1. ✅ 创建 LogLevelCache.java
  2. ✅ 改进 MixinLogCapture.java
  3. ✅ 更新 DebugTcpService.java 添加新命令
  4. ✅ 更新 mcp-server/index.js 添加新工具
  5. ✅ 测试日志捕获

第二阶段: 错误增强 (30分钟)

  1. 改进异常捕获
  2. 添加上下文信息
  3. 测试错误追踪

第三阶段: 性能监控 (可选)

  1. 添加 TPS 监控
  2. 添加性能分析
  3. 测试性能工具

💡 建议

立即实施

  1. ✅ 修复日志捕获系统(最重要)
  2. ✅ 添加分级日志查询
  3. 测试所有功能

后续考虑

  1. 添加日志过滤功能
  2. 添加日志搜索功能
  3. 添加性能分析工具
  4. 添加自动化测试

🎊 总结

项目整体架构良好,主要问题是日志捕获功能未实现。通过实施上述改进,可以将项目从"基础可用"提升到"功能完整"的专业调试工具。

关键改进: 实现真正的日志拦截和分级存储,这将大幅提升调试能力。