写在前面

  • 如果在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. PMP学习笔记 (一)

    1.第一部分 1.1 项目管理的价值观 责任.尊重.公正.诚实 1.2 项目和运营区别 项目:具有独特性.临时性.渐进明细性 运营:具有重复性和持续性 1.3 项目的产出:产品.服务或成果 1.4 滚 ...

  2. cuda-gdb

    1, cuda-gdb 可执行文件 2. b 打断点 3. 进入核函数  把断点打在核函数中 4. r 5. cuda block 1 thread 1 选取线程

  3. Android Studio打开现有的项目,Android自带的类、函数(方法)属性等爆红,含解决方式

    如上图,Android 自带的 setContentView 爆红,XML文件内 android:相关的属性(如android:layout_width) 爆红 原因: 使用Android Studi ...

  4. k8s master节点高可用 nginx+keepalived配置文件

    nginx配置 user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; i ...

  5. H5 判断当前浏览器环境是 微信还是支付宝

    let ua = window.navigator.userAgent.toLowerCase(); //判断是不是微信 if (ua.match(/MicroMessenger/i) == &quo ...

  6. UCF Local Programming Contest 2018 C. First Last Sorting 思维、简单DP

    C. First Last Sorting链接:https://nanti.jisuanke.com/t/44141

  7. Dapper.FastCRUD与Dapper中的CustomPropertyTypeMap冲突

    在使用Dapper.NET时,由于生成的实体的属性与数据库表字段不同(如表字段叫USER_NAME,生成的对应的实体属性则为UserName). 这时需要使用Dapper中的CustomPropert ...

  8. flutter 底部导航栏 BottomNavigationBar

    话不多说,上代码 import 'package:flutter/material.dart'; import 'package:flutter_zhihu/pages/tabs/homeTab.da ...

  9. ADC参悟

    SFDR比信噪比大15dB,怎么跟应用联系起来,分别决定了啥?

  10. Flask默认配置参数

    方式一:字段赋值方式导入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 from flask import Flask   app = Flask(__name__)   app. ...