Unity在接入 ILRuntime之后,如果程序报错,有些情况下的日志压根看不懂
例如:
InvalidOperationException: Collection was modified; enumeration operation may not execute.
对于类似问题,很难快速定位到错误的地方,我们要去寻找错误地方时,往往需要打印很多日志,才能定位到出错的位置,常常因为找错浪费大量的时间。
因此我先到了一种方案,将错误捕获下来,将异常信息打印出来:
如下:
双击以下文件
进入之后可以看到 ILIntepreter.cs文件之后可以看到这一句
修改:我们在外面 套一层错误捕获
如下图
try
{
esp = redirect(this, esp, mStack, cm, false);
}
catch (Exception e)
{
var stacktrace =
this.AppDomain.DebugService.GetStackTrace(this);
Debug.LogError(stacktrace);
throw new NotSupportedException(stacktrace + "\r\n" +
e.Message);
}
我们在重新运行试试
由此方法,可以很快定位到我们热更层代码锁报错的行号。
我们就可以正对性的专门调试对应的位置即可
NotSupportedException: IL_025a: call System.Boolean System.Collections.Generic.Dictionary`2/Enumerator<System.String,Game.HexInfo>::MoveNext()
如果热更新层遇到类似其他错误,导致看不懂,可以采用类似的方法,捕获错误来快速定位热更新的错误行号