写在前面

  • 如果在Player运行时突然崩溃,仅靠Player.log日志文件不能定位引起崩溃的代码,那么可以尝试利用dmp(仅限Windows平台)文件定位崩溃原因。

正文

环境

  • Unity 2020.3.21f1 (64-bit),IL2CPP后端,Windows平台。
  • Visual Studio 2019

先让Unity崩溃

  • 想要得到dmp文件,必须先让Unity崩溃。我的测试设计很简单,场景有一个按钮,点了按钮就会让Unity崩溃。场景效果如下图:

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

【Unity】使用dmp文件定位Player崩溃原因的更多相关文章

  1. VS2005(vs2008,vs2010)使用map文件查找程序崩溃原因

    VS 2005使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一个比较好的 ...

  2. dump文件定位程序崩溃代码行

    1.dump文件 2.程序对应的pdb 步骤一:安装windbg 步骤二:通过windbg打开crash dump文件 步骤三:设置pdb文件路径,即符号表路径 步骤四:运行命令!analyze -v ...

  3. 如何定位Release 版本中程序崩溃的位置 ---利用map文件 拦截windows崩溃函数

    1       案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的“名 ...

  4. VS2008通过 map 和 cod 文件定位崩溃代码行

    VS 2005/2008使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一 ...

  5. 使用MAP文件快速定位程序崩溃代码行 (转)

    使用MAP文件快速定位程序崩溃代码行 =========================================================== 作者: lzmfeng(http://lz ...

  6. Windbg抓取程序崩溃的dmp文件的方法

    Windbg抓取程序崩溃的dmp文件的方法 一.        简介 windbg是在windows平台下,强大的用户态和内核态调试工具.相比较于Visual Studio,它是一个轻量级的调试工具, ...

  7. 用windbg查看dmp文件,定位bug位置

    windbg + .dmp + .pdb + 源代码,可以看到是哪个代码崩溃的 设置符号文件所在路径 File->Symbol File Path... 在输入框中填入.pdb文件所在的文件夹路 ...

  8. 使用VS2013分析DMP文件

    当一个发布的.NET应用程序出现app crash,无法通过日志分析异常原因时,就需要通过分析DMP文件了,传统方式是通过WinDbg来分析DMP文件,但是WinDbg用起来不是很方便,其实VS就是一 ...

  9. WinDbg分析DMP文件方法完全攻略

    前言:在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试.在开发人员测试出现的bug,我们可以直接在本地进行调试.如果测试人员测试出崩溃级别的bug, ...

  10. Windows系统上release版本程序bug跟踪解决方案-.dmp文件。

    使用场景: Win32程序在release模式下编译完成,发送给最终用户使用时,我们的程序有时候也会出现崩溃的情况,这个时候如果能快速定位崩溃原因或提供一些程序崩溃时的状态信息,对我们解决问题将会带来 ...

随机推荐

  1. sql使用!=查询时会忽略null数据

    table_a有3条数据 column1值分别为1,0,null 那么 select * from table_a where column1!='1' 只会查到clumn1为0的数据,null的数据 ...

  2. 【Windows】IP 地址变为 169.254.x.x 的解决方法

    最近每次开机 IP 地址都会自动跳至 169.254.x.x 段,连接不上网络,设置了固定 IP 也会跳段.因此找到以下解决方法: 『IP地址变成169.254.x.x 和固定ip两个IP地址的解决办 ...

  3. javascript【应用】debounce和throttle

    debounce防抖 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时:典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时. <div id=& ...

  4. egg开发系列--模板语法

    在这里列一下 nunjucks 常用的模板内容 首先需要在plugin.js 当中引入 exports.nunjucks = { enable: true, package: 'egg-view-nu ...

  5. cv::inRange

    // 简单实现 cv::namedWindow("Example 2-3", cv::WINDOW_AUTOSIZE); cv::VideoCapture cap; cap.ope ...

  6. winform time.AddMinutes 时间相加

    最近修改代码,要求过滤掉重复的确认. 判断条件是(收费标记&&超时时间) 代码是这样的 1 TempRecordTableAdapter tempAda = new TempRecor ...

  7. Python接口测试request

    requests安装 用pip安装requests模块 pip install requests 一.Get的使用 格式:get(url, params=None, **kwargs) Get常见查询 ...

  8. go读取excel的内容

    import "github.com/360EntSecGroup-Skylar/excelize" func SimulationDataHandler(){ f, err := ...

  9. 【Java】时间类型

    Date 转 timeStamp long time = System.currentTimeMillis(); // 秒级 long time = System.currentTimeMillis( ...

  10. Python数据挖掘——银行分控模型的建立

    数据初始化 import pandas as pd from keras.models import Sequential from keras.layers.core import Dense, A ...