按钮的代码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。