Unreal接入指引
本文是介绍Unreal SDK的详细文档,包含了基本的接入流程,和高级的接口使用介绍。
如果想快速接入,验证平台和SDK功能,建议查看项目菜单中的“接入指南”。引导中已经按项目具体的信息(平台,引擎,国内/海外,AppID)生成了针对此项目的初始化代码,可以直接复制使用。如下图所示:
项目创建:公司外部项目支持自助创建项目,但有免费试用时长。公司内部项目,企业微信联系“CrashSight小助手”开通。
本文档适用于CrashSight SDK 4.2.x版本。4.3.x版本接入请参考新版Unreal SDK开发接入
1 Unreal引擎接入方案
1.1 导入 CrashSight UE Plugin
-
- 在平台成功创建项目后,在侧边栏的“接入指南”中,可以下载到与项目平台和引擎相匹配的SDK。如下图所示:
-
- 将位于同一目录中的 Plugins 文件解压,将 Plugins 文件夹中的CrashSight目录拷贝到UE项目根目录下的Plugins目录(如果没有则创建该文件夹)。点击[文件]刷新 [Visual Studio 项目],然后在 Visual Studio 项目中则可以看到CrashSight plugin 代码以及目录结构,如图所示。
-
- 将CrashSight插件源码和项目源码一起编译,编译完成后则可以在UE编辑器中的编辑插件中看到CrashSight插件,如图所示。
1.2 将CrashSight加入依赖项
在项目主模块的Build.cs中添加:
PrivateDependencyModuleNames.AddRange(new string[] { "CrashSight" });
1.3 执行初始化
1.3.1 Android&iOS
- 方法说明 选择第一个场景,或者主场景(scene), 在尽可能较早加载的脚本中调用如下代码进行初始化:
#include "CrashSightAgent.h" //请包含该头文件
#if DEBUG
CrashSightAgent::ConfigDebugMode (true);
#endif
// 设置上报域名,请根据项目发行需求进行填写。(必填)
CrashSightAgent::ConfigCrashServerUrl("UploadUrl");
// 设置上报所指向的APP ID, 并进行初始化。APP ID可以在管理端更多->产品设置->产品信息中找到。(必填)
CrashSightAgent::InitWithAppId("AppID");
- 上报域名
国内公有云:
海外公有云:
- Android: https://android.crashsight.wetest.net/pb/async
- iOS: https://ios.crashsight.wetest.net/pb/sync
1.3.2 Windows
方法说明 选择第一个场景,或者主场景(scene), 在尽可能较早加载的脚本中调用如下代码进行初始化:
#include "CrashSightBridgeWin.h" //请包含该头文件
CrashSight::CrashSightBridge::InitContext(UserId, AppVersion, CrashSightAppKeyForWindows);
// UserId和AppVersion可根据需要自行决定,APP Key可以在管理端更多->产品设置->产品信息中找到。
Windows平台还需添加崩溃捕获配置。崩溃捕获配置有2种方案,对于可以修改引擎的项目,强烈推荐使用1.3.2.1中的方案,崩溃上报更准确。对于其他使用官方引擎版本的用户,使用1.3.2.2中的配置。
1.3.2.1 接入方案1
- 在引擎源码 \Engine\Source\Runtime\Core\Public\Windows目录下,复制入CrashSightReporter.h
- 在引擎源码 \Engine\Source\Runtime\Core\Private\Windows\WindowsPlatformCrashContext.cpp 中引入CrashSightReporter.h,在函数ReportCrash(某些宏配置下为DefaultReportCrash)函数第一行,调用FCrashSightReporter::ReportCrashToCrashSight(ExceptionInfo);
- 编译引擎
- 在初始化函数CrashSight::CrashSightBridge::InitContext后调用 CrashSight::CrashSightBridge::SetVehEnable(false);
1.3.2.2 接入方案2
- 在初始化函数CrashSight::CrashSightBridge::InitContext后调用 CrashSight::CrashSightBridge::SetVehEnable(true);
- 在CrashSight::CrashSightBridge::SetVehEnable(true);后调用 CrashSight::CrashSightBridge::UnrealCriticalErrorEnable(true);
项目打包完成后,在CrashSight64.dll同级目录下创建CrashSightConfig64.dat文件(新建文本文档,然后修改后缀即可) CrashSightConfig64.dat文件需设置三个参数: 1)游戏进程exe名称,即GameName。 2)上报地址,即DomainUrl。 3)项目ID,即文件中的AppId。
<CrashSightConfig __version="1">
<GameName>Test-Game.exe</GameName>
<LobbyName></LobbyName>
<IgnoreDllCnt>2</IgnoreDllCnt>
<IgnoreDlls>TenSLX.dll</IgnoreDlls>
<IgnoreDlls>Tensafe.dll</IgnoreDlls>
<AppId>0620edc732</AppId>
<DomainUrl>pc.crashsight.qq.com</DomainUrl>
<LogOutput>0620edc732</LogOutput>
</CrashSightConfig>
其中<LogOutput>行是debug日志开关,添加后可以在CrashSight64.dll同目录下生成CrashSightLog目录,其中存放着CrashSight的运行日志。正式上线前请去除这一行。
1.4 Crash Reporter Client接入
Crash Reporter Client是Unreal Engine自带的崩溃上报机制,能够独立捕获并上报崩溃信息。 要通过Crash Reporter Client上报崩溃,请找到项目Config目录中的DefaultEngine.ini,在其中添加:
[CrashReportClient]
CrashReportClientVersion=1.0
DataRouterUrl="https://pc.crashsight.qq.com/csApi/ueCrc/exception/{APPID}/{VERSION}"
如果已有[CrashReportClient]块,则只需修改内容。 然后,进入项目设置->打包->高级,勾选包括崩溃报告器。 Crash Reporter Client的崩溃上报机制完全不依赖CrashSight SDK,可以单独接入,并能提供一些Unreal引擎独有的字段信息。但是需要注意的是,Crash Reporter Client仅上报崩溃,不包含错误上报等重要功能。此外,Crash Reporter Client只能设置一个DataRouterUrl,这导致CrashSight和其它崩溃上报工具不能同时使用Crash Reporter Client。
3 接口说明
3.1 初始化
public static void InitWithAppId (string appId)
说明: 执行初始化工作。 在尽可能早的位置进行初始化以开启崩溃捕获和上报功能。
参数 | 类型 | 说明 |
---|---|---|
appId | string | 已注册项目的APP ID |
3.2 debug使能开关
public static void ConfigDebugMode (bool enable)
说明:是否开启debug模式,默认为关。开启后会打印一定量的日志,但是可以方便测试期 间的问题定位。
备注:需要在InitWithAppId接口之前调用。
参数 | 类型 | 说明 |
---|---|---|
enable | bool | debug使能开关 |
3.3 上报域名设置
public static void ConfigCrashServerUrl (const char * crashServerUrl)
说明:设置上报域名。
备注:需要在InitWithAppId接口之前调用。
国内公有环境域名如下:
直接接入CrashSight域名与MSDK转接不同,请务必重新依照上述域名配置。其他环境域名请咨询接入接口人。
参数 | 类型 | 说明 |
---|---|---|
crashServerUrl | const char * | 要上报的域名 |
3.4 设置自定义日志上报级别
public static void ConfigCrashReporter (int logLevel)
说明:设置自定义日志上报级别 Off=0,Error=1,Warn=2,Info=3,Debug=4
备注:需要在InitWithAppId接口之前调用。
参数 | 类型 | 说明 |
---|---|---|
logLevel | int | 日志级别 |
3.5 设置渠道、应用版本、用户ID、延迟初始化
static void ConfigDefault (const char *channel, const char *version, const char * user, long delay);
备注:需要在InitWithAppId接口之前调用。
参数 | 类型 | 说明 |
---|---|---|
channel | const char * | 渠道 |
version | const char * | 应用版本 |
user | const char * | 用户ID |
delay | long | 延迟(s) |
3.6 设置Android设备ID
public static void SetDeviceId(const char *deviceId)
说明:从4.2.9版本开始,CrashSight Android不再获取AndroidId,默认采用uuid作为设备ID
备注:需要在InitWithAppId接口之前调用。
参数 | 类型 | 说明 |
---|---|---|
deviceId | const char * | 设备ID |
3.7 设置Android手机型号
public static void SetDeviceModel(const char *deviceModel)
说明:设置手机型号
备注:需要在InitWithAppId接口之前调用。
参数 | 类型 | 说明 |
---|---|---|
deviceModel | const char * | 手机型号 |
3.8 上报错误
public static void ReportException(int type, const char * name, const char * reason, const char * stackTrace, const char * extras, bool quit, bool isDumpNativeStack= false)
说明: 主动上报错误信息
参数 | 类型 | 说明 |
---|---|---|
type | int | 异常类型, C#: 4, js: 5, lua: 6 |
name | const char * | 异常名称 |
reason | const char * | 异常信息 |
stackTrace | const char * | 堆栈 |
extras | const char * | 其他信息 |
quit | bool | 是否退出 |
isDumpNativeStack | bool | 是否dump当前线程的Native堆栈 |
页面查看:
extras:崩溃详情页->附件下载->extraMessage.txt
Native堆栈:崩溃详情页->附件下载->trace.zip
public static void ReportExceptionJson(int type, const char *exceptionName, const char *exceptionMsg, const char *exceptionStack, const char *paramsJson, bool isDumpNativeStack =false)
说明: 主动上报错误信息
参数 | 类型 | 说明 |
---|---|---|
type | int | 异常类型, C#: 4, js: 5, lua: 6 |
exceptionName | const char * | 异常名称 |
exceptionMsg | const char * | 异常信息 |
exceptionStack | const char * | 堆栈 |
paramsJson | const char * | 其他信息, map编码的Json字符串 |
quit | bool | 是否退出 |
isDumpNativeStack | bool | 是否dump当前线程的Native堆栈 |
页面查看:
paramsJson:崩溃详情页->附件下载->extraMessage.txt
Native堆栈:崩溃详情页->附件下载->trace.zip
其它:上报错误耗时
Android | iOS | |||
---|---|---|---|---|
附件大小 | dump堆栈 | 不dump堆栈 | dump堆栈 | 不dump堆栈 |
100K | [0.498881]s | [0.003127]s | [0.117762]s | [0.001172]s |
10K | [0.464859]s | [0.000730]s | [0.115362]s | [0.000445]s |
1K | [0.477934]s | [0.000189]s | [0.117078]s | [0.000293]s |
3.9 设置用户ID
public static void SetUserId (const char *userId)
说明: 设置用户ID,请在初始化之后调用。
参数 | 类型 | 说明 |
---|---|---|
userId | const char * | 用户ID |
3.10 标记场景
public static void SetScene (int sceneId)
说明: 设置用户ID
参数 | 类型 | 说明 |
---|---|---|
sceneId | int | 场景ID |
3.11 设置应用版本
static void SetAppVersion(const char *appVersion)
说明:设置应用版本号
Android 默认使用AndroidManifest.xml文件的versionName属性
iOS 配置Info.plist, {CFBundleShortVersionString}.{CFBundleVersion} 组合成app版本号
备注:需要在InitWithAppId接口之前调用。
参数 | 类型 | 说明 |
---|---|---|
appVersion | const char * | 版本号 |
3.12 添加自定义数据
public static void AddSceneData (const char *key, const char *value)
说明:设置用户自定义的 Key-Value 数据,将在发送 Crash 时随异常信息一起上报,单个key长度限制100字符,单个value限制1000字符,总长度(所有key+value)限制(Android 64KB,iOS 128KB)。支持在回调中使用。
页面查看:崩溃详情页->附件下载->valueMapOthers.txt
参数 | 类型 | 说明 |
---|---|---|
key | const char * | 键 |
value | const char * | 值 |
3.13 自定义日志
public static void PrintLog (LogSeverity level, const char * format, ...)
说明:自定义日志,限制30KB。安卓不支持在崩溃回调中写入自定义日志。
参数 | 类型 | 说明 |
---|---|---|
level | LogSeverity | 日志级别 |
format | const char * | 日志格式 |
3.14 设置回调
public static void SetCrashObserver(UQMCrashObserver *crashObserver)
说明: 回调函数在捕获到崩溃时调用。自定义CSCrashCallBack类,继承UQMCrashObserver,实现OnCrashExtraMessageNotify、OnCrashExtraDataNotify方法
参数 | 类型 | 说明 |
---|---|---|
crashObserver | UQMCrashObserver | UQMCrashObserver实现 |
示例如下 :
CSCrashCallBacks.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UQMCrash.h"
/**
*
*/
using namespace UQM;
class CRASHSIGHTDEMO_UE_API CSCrashCallBacks : public UQMCrashObserver
{
public:
CSCrashCallBacks();
~CSCrashCallBacks();
const char* OnCrashExtraMessageNotify(int crashType);
long OnCrashExtraDataNotify(const InnerCrashRet &crashRet);
};
CSCrashCallBacks.cpp
#include "CSCrashCallBacks.h"
CSCrashCallBacks::CSCrashCallBacks()
{
}
CSCrashCallBacks::~CSCrashCallBacks()
{
}
const char* CSCrashCallBacks::OnCrashExtraMessageNotify(int crashType) {
char str1[] = "this is extra message.";
char *retValue = SAFE_MALLOC(strlen(str1) + 1, char); //最大长度128*1024字符,超过会截断
strcpy(retValue, str1);
return retValue;
}
long CSCrashCallBacks::OnCrashExtraDataNotify(const InnerCrashRet &crashRet) {
char str[] = "this is extra data.";
strcpy(crashRet.data, str); //已经分配 128*1024 byte内存,无需再分配,超过会截断
return strlen(str);
}
Android OnCrashExtraMessageNotify 返回的内容在页面“崩溃详情页->附件下载-extraMessage.txt” Android OnCrashExtraDataNotify 返回的内容在页面“崩溃详情页->附件下载-userExtraByteData”,Base64编码 iOS OnCrashExtraMessageNotify返回的内容在页面“崩溃详情页->附件下载-crash_attach.log” iOS 不调用OnCrashExtraDataNotify接口
callback type对照表:
callback type | 异常类型 |
---|---|
0 | Java crash |
2 | Native crash |
3 | c# exception |
4 | ANR |
5 | JS exception |
6 | lua exception |
8 | custom error |
3.15 设置上传日志路径
public static void SetLogPath(const char *logPath)
说明:设置崩溃后上传的日志路径,需要可读权限
参数 | 类型 | 说明 |
---|---|---|
logPath | const char * | 日志绝对路径 |
3.16 设置日志上传回调
页面查看: 崩溃详情-附件下载
public static void SetCrashLogObserver(UQMCrashLogObserver *crashObserver)
说明: 回调函数在上传日志时调用。自定义 MyCrashLogCallback 类,继承UQMCrashLogObserver,实现OnCrashSetLogPathNotify、OnCrashLogUploadResultNotify方法
参数 | 类型 | 说明 |
---|---|---|
crashObserver | UQMCrashLogObserver | UQMCrashLogObserver的子类 |
示例如下:
MyCrashLogCallback.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UQMCrash.h"
using namespace UQM;
/**
*
*/
class UQMCRASHSIGHTTEST_API MyCrashLogCallback: public UQMCrashLogObserver
{
public:
MyCrashLogCallback();
~MyCrashLogCallback();
// 设置日志路径回调
const char* OnCrashSetLogPathNotify(int crashType);
// 通知日志上传结果回调
void OnCrashLogUploadResultNotify(int crashType, int result);
};
MyCrashLogCallback.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyCrashLogCallback.h"
MyCrashLogCallback::MyCrashLogCallback()
{
}
MyCrashLogCallback::~MyCrashLogCallback()
{
}
// 设置日志路径回调
// @param crashType 崩溃类型,0:Java崩溃,2:Native崩溃
// @result 日志的绝对路径,如果非空覆盖SetCrashLogObserver接口设置的路径
const char *MyCrashLogCallback::OnCrashSetLogPathNotify(int crashType)
{
const char *path = "/data/data/packagename/app_crashSight/log.txt";
return path;
}
// 通知日志上传结果回调
// @param crashType 崩溃类型,0:Java崩溃,2:Native崩溃
// @param retust 日志上传结果, 0:成功,其它:失败
void MyCrashLogCallback::OnCrashLogUploadResultNotify(int crashType, int result)
{
}
3.17 设置上报的Android Locat大小
public static void SetLogcatBufferSize(int size)
说明:设置崩溃和错误时上传的logcat日志大小,仅Android有效。建议设置不超过128KB。默认值为30KB。
参数 | 类型 | 说明 |
---|---|---|
size | int | logcat日志大小,单位byte |
4.接口说明(Windows)
4.1 初始化
static int InitContext(const char *user_id, const char *version, const char *key);
说明: 执行初始化工作。 在尽可能早的位置进行初始化以开启崩溃捕获和上报功能。
参数 | 类型 | 说明 |
---|---|---|
userId | string | 用户Id |
version | string | 版本号 |
key | string | 已注册项目的APP key |
4.2 主动上报错误
static void ReportException(int type, const char *exp_name, const char *exp_message, const char *stack_trace, const char *extras, bool is_async, const char *error_attach_path);
说明:主动上报错误
参数 | 类型 | 说明 |
---|---|---|
type | int | 异常类型, C#: 4, js: 5, lua: 6 |
exp_name | const char * | 异常名称 |
exp_message | const char * | 异常信息 |
stack_trace | const char * | 堆栈 |
extras | const char * | 其他信息 |
is_async | bool | 是否异步 |
error_attach_path | const char * | 附件的绝对路径(不支持GBK字符) |
static void ReportExceptionW(int type, const char *exp_name, const char *exp_message, const char *stack_trace, const char *extras, bool is_async, const wchar_t *error_attach_path);
说明:主动上报错误
参数 | 类型 | 说明 |
---|---|---|
type | int | 异常类型, C#: 4, js: 5, lua: 6 |
exp_name | const char * | 异常名称 |
exp_message | const char * | 异常信息 |
stack_trace | const char * | 堆栈 |
extras | const char * | 其他信息 |
is_async | bool | 是否异步 |
error_attach_path | const wchar_t * | 附件的绝对路径 |
4.3 添加自定义数据
static void SetUserValue(const char *key, const char *value);
说明:设置用户自定义的 Key-Value 数据,将在发送 Crash 时随异常信息一起上报,单个key长度限制100字符,单个value限制1000字符
页面查看:崩溃详情页->Value Map
参数 | 类型 | 说明 |
---|---|---|
key | const char * | 键 |
value | const char * | 值 |
4.4 设置自定义日志路径
static void SetCustomLogDir(const char *log_path);
页面查看:崩溃详情页->附件下载->CustomizedLogFile.zip
参数 | 类型 | 说明 |
---|---|---|
log_path | const char * | 日志路径(不支持GBK字符) |
static void SetCustomLogDirW(const wchar_t *log_path);
页面查看:崩溃详情页->附件下载->CustomizedLogFile.zip
参数 | 类型 | 说明 |
---|---|---|
log_path | const wchar_t * | 日志路径 |
需要传入带中文的路径时,请使用宽字符版本(SetCustomLogDirW)
需要上传多个日志时,请使用“|”分隔路径,一次最多传入3个文件的绝对路径,不支持传入目录。单个文件最大支持20MB,大小超过20MB的文件会截取最后20MB;压缩后最 大支持10MB,压缩时会依次放入文件,如果某个文件放入后压缩包大小超过10MB,则会跳过这个文件。
4.5 设置用户ID
static void SetUserId(const char *user_id);
参数 | 类型 | 说明 |
---|---|---|
user_id | const char * | 用户ID |
4.6 添加自定义日志
static void PrintLog(LogSeverity level, const char *tag, const char *format, ...);
说明:自定义日志,限制30KB
参数 | 类型 | 说明 |
---|---|---|
level | CSLogSeverity | 日志级别 |
tag | const char * | 日志标签 |
format | const char * | 日志格式 |
args | params object[] | 可变参数 |
4.7 启用Veh异常处理
static void SetVehEnable(bool enable);
参数 | 类型 | 说明 |
---|---|---|
enable | bool | Veh异常处理开关 |
4.8 主动上报崩溃
static void ReportCrash();
说明:主动上报一条崩溃信息
4.9 主动上报dump
static void ReportDump(const char *dump_path, bool is_async);
参数 | 类型 | 说明 |
---|---|---|
dump_path | const char * | dump目录 |
is_async | bool | 是否强制退出程序 |
4.10 设置崩溃回调
static void SetCrashCallback(CrashCallbackFuncPtr callback);
参数 | 类型 | 说明 |
---|---|---|
callback | CrashCallbackFuncPtr | 崩溃回调函数指针 |
回调函数定义为:
typedef void (*CrashCallbackFuncPtr)(int type, const char *guid);
参数 | 类型 | 说明 |
---|---|---|
type | int | 崩溃的类型 |
guid | const char * | 客户端侧上报ID |
4.11 开启额外异常捕获
static void SetExtraHandler(bool extra_handle_enable);
说明:设置额外的异常处理机制,默认为关闭,与旧版保持一致。 开启后,可以捕获上报strcpy_s一类的安全函数抛出的非法参数崩溃,以及,虚函数调用purecall错误导致的崩溃。
参数 | 类型 | 说明 |
---|---|---|
extra_handle_enable | bool | 额外异常捕获开关 |
4.12 上传dump文件
static void UploadGivenPathDump(const char *dump_dir, bool is_extra_check);
说明:上传指定路径下的dump文件
参数 | 类型 | 说明 |
---|---|---|
dump_dir | const char * | dump文件地址 |
is_extra_check | bool | 默认填false即可 |
4.13 UE Critical Error上报
static void UnrealCriticalErrorEnable(bool enable);
说明:设定是否上报UE的Critical Error
参数 | 类型 | 说明 |
---|---|---|
enable | bool | UE Critical Error上报开关 |
4.14 仅上报首条崩溃开关
static void OnlyUploadFirstCrash(bool enable);
说明:开启后,每次启动仅会上报首个捕获的崩溃,防止重复上报。仅在VEH捕获关闭时生效
参数 | 类型 | 说明 |
---|---|---|
enable | bool | 仅上报首条崩溃开关 |
4.15 设置自定义附件路径
static void SetCustomAttachDir(const char *attach_path);
页面查看:崩溃详情页->附件下载->CustomizedAttachFile.zip
参数 | 类型 | 说明 |
---|---|---|
attach_path | const char * | 附件路径(不支持GBK字符) |
static void SetCustomAttachDirW(const wchar_t *attach_path);
页面查看:崩溃详情页->附件下载->CustomizedAttachFile.zip
参数 | 类型 | 说明 |
---|---|---|
attach_path | const wchar_t * | 附件路径 |
需要传入带中文的路径时,请使用宽字符版本(SetCustomAttachDirW)
需要上传多个附件时,请使用“|”分隔路径,一次最多传入3个文件的绝对路径,不支持传入目录。单个文件最大支持20MB,大小超过20MB的文件会自动忽略;压缩后最大支持10MB,压缩时会依次放入文件,如果某个文件放入后压缩包大小超过10MB,则会跳过这个文件。
5.安卓额外操作
5.1 开启Critical Error上报
在Android平台上,Unreal引擎将Critical Error的退出方式设为正常退出,导致CrashSight无法直接捕获这一类崩溃。为了捕获Critical Error,需要找到UE引擎代码如下位置:
将
FPlatformMisc::RequestExit(true);
改为
abort();
iOS的Critical Error是以崩溃方式退出,因此无需更改。
5.2 UE5.1及以上unwind问题修复
Unreal engine 5.1及以上打包的Android项目会出现unwind崩溃问题,导致native crash上报失败。以下是通过修改源码来避免unwind崩溃问题的方法:
6.接入结果测试
CrashSight测试接口
测试Java崩溃(仅Android)
static void TestJavaCrash();
测试Object-C崩溃(仅iOS)
static void TestOcCrash();
测试Native崩溃(Android&iOS)
static void TestNativeCrash();
6.1. iOS测试方法:
- a. 开启Debug模式,初始化CrashSight,并给定合适的配置参数
- b. 联网上报:检查测试设备日志中是否打印“begin to upload <CSAnalyticsLogic” 或者 “cmd: 641”
- c. 崩溃捕获:检查测试设备日志中是否打印“Handle the crash scene in callback”
- d. 上报异常:检查测试设备日志中是否打印“begin to upload <CSCrashLogic” 或者 “cmd: 631”
6.2. Android测试方法:
- a. 开启Debug模式,初始化CrashSight,并给定合适的配置参数
- b. 联网上报:检查logcat日志是否打印“[Upload] Run upload task with cmd: 840”
- c. 崩溃捕获:检查logcat日志是否打印“HandleSignal start”
- d. 上报异常:检查logcat日志是否打印"[Upload] Run upload task with cmd: 830"
6.3. Windows测试方法:
-
a.初始化CrashSight后,联网上报是否正常,具体验证方法如下:
- 初始化CrashSight;
- 5分钟后,在管理端页面的 异常概览 --> 崩溃趋势 --> 联网设备数 中可以看到统计数值大于等于1.
-
b.游戏发生崩溃,是否能正确上报,具体验证方法如下:
- 初始化CrashSight;
- 在游戏内可以由以下代码触发崩溃。(其他类似的坏内存访问也可以)
int* a = NULL;
a[10000] = 5; -
c.查看CrashSight64/dump目录(旧版本为TQM64/dump)下是否有dmp文件生成。如果没有,说明无法成功捕获崩溃, 请联系CrashSight开发.
-
d.查看管理端页面 “崩溃分析”页上,是否有对应时间点的上报。如果3有,4没有,说明没有成功上报。请检查APPID配置(两个配置文件均要正确),以及APP KEY配置,是否对应且与应用设置中一样。如果配置正确,还无法上报,请联系CrashSight开发.
-
e.崩溃上报的版本号,用户名是否与设置一致.
-
f.错误上报的版本号,用户名是否与设置一致.
7.上传符号表
以上内容介绍了SDK的接入,崩溃上报和验证,但要在页面上看到可读的还原堆栈,还需要上传对应的符号表,请见 符号表上传工具使用说明