当你的游戏崩溃时,虚幻引擎会创建崩溃报告,它可以将报告发送到 崩溃报告客户端(Crash Report Client) 。崩溃报告客户端是一个应用程序,可提示用户提供注释(可选)并向Epic Games提交崩溃报告。你可以自定义随你的游戏打包的崩溃报告客户端,将崩溃报告数据发送到你自己的服务器,以帮助调试游戏。
本指南提供了:
- 崩溃报告及其内容的概述。
- 有关在本地计算机上何处查找崩溃报告的信息。
- 崩溃报告的配置变量参考和项目设置。
- 如何为你自己的打包应用程序修改和配置崩溃报告器客户端。
- 崩溃报告服务推荐,你可以用它接收远程服务器上的崩溃报告。
崩溃报告
崩溃报告包含:
- 一个唯一的随机崩溃标识符,即 崩溃guid 。
- 有关错误的信息,例如类型(崩溃、断言、确保等),或崩溃线程和其他所有线程的调用堆栈。
- 计算机的系统信息和应用程序上下文信息,例如构建配置。
- 崩溃时的日志输出。这可以是设备运行时日志或项目编辑器日志。
- 游戏使用键/值对提供的额外上下文。
- 用户通过崩溃报告客户端提供的额外注释。
下面是在崩溃报告客户端中查看崩溃报告的示例:

在哪里查找本地崩溃报告
来自编辑器的崩溃报告存储在你的本地计算机上你的项目的 Saved/Crashes
文件夹中。
你也可以在用户本地计算机上的 C:\Users[Your Windows Username]\AppData\Local[Project Name]\Saved\Crashes
中找到崩溃报告。
虚幻引擎中的常见崩溃原因
以下是出现崩溃报告的最常见原因。这些原因都会启动崩溃报告器客户端,并在调用堆栈上方随附消息,详述遇到的崩溃类型。
崩溃源 | 说明 | 示例图像(点击放大) |
---|---|---|
崩溃(Crash) | 发生了程序无法处理的事情,因此程序关闭。发生崩溃的原因包括:
|
|
断言(Assert) | 开发人员故意在代码中放入断言语句,使程序在特定条件下崩溃。这可以验证你关于某些内容在之后的运行期间可能会导致问题的预想,以便及早发现。例如:
如需详细了解虚幻引擎中的断言,请参阅关于断言的文档页面。 |
|
确保(Ensure) | “确保”会检查特定条件,但不会在解决false后崩溃。相反,它们会向输出日志生成消息,并在无人照管模式下向崩溃报告器发送报告。这可以用于你想监控的事项,但不一定是崩溃执行。例如:
如需详细了解虚幻引擎中的确保,请参阅关于断言的文档页面。 |
“确保”仅用作开发工具,在测试和发布构建配置中通常会禁用。我们建议你始终使用发布配置将游戏发布给最终消费者。如果你没有修改崩溃报告器客户端,发行开发或调试版本可能导致你的用户发送无人照管的崩溃报告给Epic Games。
将自定义上下文添加到崩溃报告
除了添加到崩溃报告的标准信息之外,游戏项目还可以添加自己的自定义上下文,即 游戏数据 。这可以是关于游戏模式、玩家在世界中的位置信息,或对于调查漏洞至关重要的其他游戏状态信息。这些数据使用键/值对和 FPlatformCrashContext::SetGameData
函数添加。
GenericPlatformCrashContext.h
/** 将任意游戏数据更新(或在尚不存在时添加)到崩溃上下文(传递了空字符串时将删除键) */
CORE_API static void SetGameData(const FString& Key, const FString& Value);
请注意,自定义上下文设置在发生错误 之前。收集崩溃报告时,会捕获游戏数据值的当前状态并写入报告。
例如,每当你的游戏进入新游戏模式时,调用:
MyGameMode.cpp
void OnEnterMyGameMode()
{
FPlatformCrashContext::SetGameData(TEXT("GameMode"), TEXT("MyGameModeName"));
}
void OnExitMyGameMode()
{
FPlatformCrashContext::SetGameData(TEXT("GameMode"), FString());
}
在该游戏模式期间发生的崩溃将包含以下XMLdata:
CrashContext.runtime-xml
<GameData>
<GameMode>MyGameModeName</GameMode>
</GameData>
崩溃报告器基础设施
UE的崩溃报告基础设施包括以下组件:
-
用户计算机上的 崩溃报告客户端 ,随编辑器或你的游戏版本一起发行。崩溃报告客户端会将崩溃转储信息发送给你的终端。
-
带有能管理、筛选和存储崩溃报告的应用程序和组件的 服务器。
下面各小节详述了其中每个组件,以及如何为你自己的组织设置它们。
崩溃报告器客户端
崩溃报告器客户端是一个单独程序,可用于编辑器版本,也可选择与用户计算机上的运行时版本打包使用。编辑器或打包的应用程序崩溃时,引擎会生成崩溃报告,然后启动崩溃报告器客户端(如果可用)。如果崩溃报告器不处于无人照管模式,它会显示带有崩溃数据的窗口,并提示用户发送或不发送报告。
将崩溃报告器客户端打包进你的游戏
默认情况下,打包的游戏中不含崩溃报告器客户端。要将其添加到你的打包版本中,请执行以下操作:
-
在虚幻编辑器中,打开 项目设置(Project Settings) 并找到 项目(Project) > 打包(Packaging) 。
-
展开 高级(Advanced) 下拉菜单。
-
启用 包含崩溃报告器(Include Crash Reporter) 设置。
你也可以将 IncludeCrashReporter=True
添加到你的项目的 Config/DefaultGame.ini
文件。
DefaultGame.ini
[/Script/UnrealEd.ProjectPackagingSettings]
IncludeCrashReporter=True
配置自动崩溃报告
以下配置变量决定了崩溃报告器是否应该自动将崩溃报告发送给服务器。你可以在[CrashReportClient]
目录下的任意 Engine.ini
文件中进行此类配置。
配置变量 | 说明 |
---|---|
bAgreeToCrashUpload |
控制崩溃报告客户端是否应该自动发送崩溃事件。此变量仅用于Linux版本。它在Windows和Mac版本上默认为 false ,但在Linux版本上为 true 。 |
bSendUnattendedBugReports |
控制是否以无人照管方式发送崩溃事件。如果启用,崩溃报告客户端将跳过对用户显示的步骤,并自动将崩溃事件发送给服务器。此变量适用于所有平台,并默认为 true 。 |
DefaultEngine.ini
[CrashReportClient]
bAgreeToCrashUpload=false
bSendUnattendedBugReports=false
在UE 5.3.2及更早版本中,由于存在漏洞, bSendUnattendedCrashReports
不能在打包了崩溃报告器的运行时版本上正确运行。设置为false时,崩溃报告器仍会自动将关于“确保”的报告发送给Epic Games。此问题将在UE 5.4中修复。
配置崩溃报告器客户端
你可以自定义崩溃报告器客户端,将崩溃事件发送给你选择的服务器。要自定义崩溃报告器,请执行以下操作:
-
打开你的虚幻引擎安装目录。
-
找到Engine/Programs/CrashReportClient/Config
-
打开
DefaultEngine.ini
文件。
该配置文件包含了用于配置崩溃报告器的所有变量。
DefaultEngine.ini (Programs/CrashReportClient)
[CrashReportClient]
DataRouterUrl="https://datarouter.ol.epicgames.com/datarouter/api/v1/public/data"
bAllowToBeContacted=true
bSendLogFile=true
CanSendWhenUIFailedToInitialize=true
UIInitRetryCount=10
UIInitRetryInterval=2.0
更改要将崩溃报告发送到的URL
要将崩溃报告发送给你自己的组织,请将 DataRouterURL
变量更改为你自己的崩溃报告服务器的URL。请参阅下面的崩溃报告服务器一节,详细了解如何设置此终端。
配置变量参考
崩溃报告器客户端的配置变量如下所示:
配置变量 | 默认值 | 说明 |
---|---|---|
DataRouterUrl | https://datarouter.ol.epicgames.com/datarouter/api/v1/public/data | 指向你的崩溃报告服务器的URL。 |
bAllowToBeContacted | true | 对话框中“允许联系(Allow to be contacted)”选项的默认状态。 |
bSendLogFile | true | 控制崩溃报告客户端是否应该发送与崩溃关联的日志文件。 |
CanSendWhenUIFailedToInitialize | true | 如果崩溃报告客户端未能成功初始化其UI,这会控制是否自动发送崩溃报告。 |
UIInitRetryCount | 10 | 重试打开崩溃报告客户端窗口多少次之后自动发送崩溃报告。 |
UIInitRetryInterval | 2 | 重试尝试之间的间隔秒数。 |
编辑器版本始终包含崩溃报告客户端,但你可以选择是否将其包含在打包版本中。
崩溃报告服务器
要充分利用崩溃报告器,你需要设置服务器来接收远程用户的崩溃报告并将其符号化。UE不包括带有源代码或二进制文件的此类组件。但是,将源代码用于崩溃报告客户端,你就可以开始创建自己的自定义解决方案。此外,也有一些第三方崩溃报告服务可供你部署。
以下是UE社区中常用的崩溃报告服务。每一类服务都有相关文档,寿命了如何将其与UE的崩溃报告器集成: