按钮的代码TestCrash.cs如下(参考链接:“
怎样能够强制Unity应用Crash
”),我在ClickCrash方法中写了强制崩溃:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Diagnostics;
public class TestCrash : MonoBehaviour
public void ClickCrash()
UnityEngine.Debug.LogFormat($"<color=yellow>ForceCrash</color>");
Utils.ForceCrash(ForcedCrashCategory.FatalError);
在编辑器上,Unity的表现是突然卡住,然后弹出向Unity官方发送报错的窗口,关闭这个窗口后编辑器也会被关闭。
利用dmp文件定位崩溃代码
编辑器上可以成功崩溃后就打Player,如下图,BuildSetting窗口务必要勾上Development Build,再勾上Deep Profiling Support,不然即使得到dmp文件也无法具体定位。
打出的Player文件夹内容如下图,这里我的Player叫2019TestMisc.exe。
顺便一提,我在Assembly-CSharp4.cpp里找到了我写的测试代码。
运行2019TestMisc.exe,能正常崩溃,这里的表现也是突然卡住,然后弹出向Unity官方发送报错的窗口,关闭这个窗口后2019TestMisc.exe也会被关闭。
UnityManual有介绍在哪里可以看Crash文件,我的Crash文件夹路径如下图:
打开文件夹就能看到crash.dmp文件和Player.log。
UnityManual有调试说明,这里我用Vs打开crash.dmp文件,如下图,它长这样:
我按照调试说明设置了符号路径,如下图,为了能尽快定位崩溃,我在“自动符号加载首选项”里选了“加载除排除模块之外的所有模块”。
开始调试,调试结果如下图,能看到它会定位到一个C++文件,调用堆栈窗口里能看到引起崩溃的具体脚本TestCrash和方法ClickCrash。