focus-creative-games / hybridclr

HybridCLR是一个特性完整、零成本、高性能、低内存的Unity全平台原生c#热更新解决方案。 HybridCLR is a fully featured, zero-cost, high-performance, low-memory solution for Unity's all-platform native c# hotupdate.
https://code-philosophy.com/
MIT License
6.61k stars 672 forks source link

Unity 2020.3.48f1 + HybridCLR 4.0.14,在开启增量GC的情况下极大概率出现崩溃 #117

Closed xzhjieie closed 10 months ago

xzhjieie commented 10 months ago

Describe the bug | 描述问题 Unity 2020.3.48f1 + HybridCLR 4.0.14,在开启增量GC的情况下极大概率出现崩溃;如果不开启增量GC,则不会出现这个问题了。后续升级版本到HybridCLR 4.0.15 后仍然存在崩溃问题。

Enviroment | 环境

To Reproduce | 复制步骤 C++ 层调用AOT 中的接口 OnRecvGameShowData,在切换场景后引起了崩溃。

// C++ 层调用该接口
[MonoPInvokeCallback(typeof(DegateOnRecvGameShowData))]
public static void OnRecvGameShowData(int iCmd, IntPtr data, int iLen)
{
    Marshal.Copy(data, abyRecvBufer, 0, iLen);
    // 利用反射调用热更 dll 里面的接口
    HotApis.GameApp_GeMain_Instance_OnRecvGameShowData(iCmd, abyRecvBufer, iLen);
}

崩溃日志 崩溃日志是这样的 image

这是解析后的调用堆栈日志 image

pirunxi commented 10 months ago

提供可复现的工程。直接提供win visual studio工程也可以