UE4SS项目中监视器功能导致游戏退出时崩溃问题分析

UE4SS项目中监视器功能导致游戏退出时崩溃问题分析

【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 【免费下载链接】RE-UE4SS 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS

问题概述

在UE4SS项目3.0.1版本中,当用户使用监视器(watch)功能并启用日志记录到文件时,游戏退出过程中会出现崩溃问题。同时,监视器收集的数据也无法正确写入日志文件。这个问题主要影响使用Deep Rock Galactic游戏和Unreal Engine 4.27引擎的用户。

技术背景

UE4SS是一个强大的Unreal Engine 4脚本系统,它提供了监视器功能,允许开发者实时监控游戏中的属性和函数调用。监视器功能可以将监控到的数据输出到GUI界面或记录到文件中,对于游戏调试和逆向工程非常有用。

问题详细分析

崩溃原因

经过技术分析,崩溃的根本原因是监视器处理过程与游戏关闭流程之间的时序冲突。当游戏开始关闭时,UE引擎会开始释放各种对象,而此时监视器可能仍在尝试访问这些即将被释放的对象(如被监视的函数或属性),导致访问违规和崩溃。

具体表现为:

  1. 游戏退出流程启动
  2. UE引擎开始释放对象
  3. 监视器线程仍在运行并尝试访问这些对象
  4. 由于对象已被释放,导致非法内存访问而崩溃

日志记录功能失效

日志记录功能失效的原因在于原始实现仅针对属性(Property)进行了完整实现,而对函数(Function)的日志记录支持不完整。当用户监视函数调用时,虽然GUI界面能正常显示数据,但日志记录功能并未实际执行。

解决方案

崩溃问题解决方案

针对崩溃问题,技术团队提出了几种可能的解决方案:

  1. 使用对象删除监听器锁(FUObjectArray::UObjectDeleteListenersCritical)

    • 这个锁在UObjectArray关闭时会被锁定
    • 相对容易实现,因为UE4SS已经实现了FUObjectArray相关功能
    • 需要在UVTD中添加相应支持
  2. 使用垃圾回收同步锁(FGCCSyncObject::Critical)

    • 这是更底层的解决方案
    • 但实现难度较大,不易直接访问
  3. 优化监视器关闭时序

    • 在游戏开始关闭前主动停止所有监视器
    • 确保监视器处理在对象释放前完成

日志功能完善

技术团队已经完善了日志记录功能,使其支持:

  • 函数调用的日志记录
  • 结构体属性(StructProperty)的监视
  • 数组属性(ArrayProperty)的监视

现在每个监视器都会生成独立的日志文件,而不是全部写入同一个watches.meta.json文件(该文件仅用于存储自动创建监视器的元数据)。

最佳实践建议

对于使用UE4SS监视器功能的开发者,建议:

  1. 定期保存重要数据:不要依赖游戏退出时的自动保存,重要数据应手动保存。

  2. 监视复杂类型时

    • 结构体和数组属性现在已支持,但需注意性能影响
    • 复杂类型的监视可能会产生大量日志数据
  3. 崩溃预防

    • 在退出游戏前,手动关闭所有活跃的监视器
    • 避免监视引擎核心对象,这些对象往往最先被释放
  4. 日志管理

    • 注意日志文件会随监视器数量增加而增多
    • 定期清理不需要的日志文件

总结

UE4SS的监视器功能是一个强大的调试工具,但在游戏退出流程中存在稳定性问题。技术团队已经通过多项改进增强了其可靠性,包括完善日志记录功能和解决崩溃问题。开发者在使用时应了解这些技术细节,以充分发挥监视器功能的优势,同时避免潜在问题。

【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 【免费下载链接】RE-UE4SS 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值