跳到主要内容

快速上手(使用崩溃/错误分析)

本文以Android、iOS、Windows三端的跨平台Unreal项目为例,示范CrashSight 的崩溃/错误分析使用方式。

前置条件

对于本文示例中的情况,需要预先创建好Android、iOS、Windows项目各一个。
前往“接入指南”页,选择“Unreal”选项,下载SDK包,并根据提示导入到项目中。

初始化

在程序运行尽可能早的位置插入如下代码,初始化CrashSight

#include "CrashSightAgent.h" //请包含该头文件
using namespace GCloud::CrashSight; //接口在此命名空间下

// 初始化
const char* url;
const char* appid;
#if PLATFORM_ANDROID
url = "https://android.crashsight.qq.com";
appid = "xxx";
#elif PLATFORM_IOS
url = "https://ios.crashsight.qq.com";
appid = "xxx";
#elif PLATFORM_WINDOWS
url = "https://pc.crashsight.qq.com";
appid = "xxx";
#endif
#if DEBUG
CrashSightAgent::ConfigDebugMode(true);
#endif
CrashSightAgent::SetAppVersion("1.1.1");
CrashSightAgent::ConfigCrashServerUrl(url);
CrashSightAgent::InitWithAppId(appid);
#if PLATFORM_WINDOWS
CrashSightAgent::SetVehEnable(false);
CrashSightAgent::OnlyUploadFirstCrash(true);
#endif

说明:

  • 即使是同一个项目,不同平台的appid也是不同的
  • 请在正式发布前确认debug模式(ConfigDebugMode)为false
  • 设置版本号(SetAppVersion)需要在初始化(InitWithAppId)之前执行

如需设置回调,还要添加如下代码:

#include "UQMCrash.h" //请包含该头文件
using namespace UQM; //回调接口在此命名空间下

// 实现回调类
class MyCrashCallback : public UQMCrashObserver {
public:
const char* OnCrashExtraMessageNotify(int crashType) {
return "message";
}
long OnCrashExtraDataNotify(const UQMInnerCrashRet& crashRet) {
char str[] = "this is extra data.";
strcpy(crashRet.data, str);
return strlen(str);
}
};
class MyCrashLogCallback : public UQMCrashLogObserver
{
public:
const char* OnCrashSetLogPathNotify(int crashType) {
return "path/to/log/file";
}
void OnCrashLogUploadResultNotify(int crashType, int result) {

}
};

// 在初始化代码后添加如下代码,注册回调
UQMCrash::SetCrashObserver(new MyCrashCallback());
UQMCrash::SetCrashLogObserver(new MyCrashLogCallback());

说明:

  • OnCrashExtraMessageNotify 会在崩溃和错误发生时被调用,它返回的回调信息将显示在“附件下载”页签中。在Android平台上,返回值只能为UTF-8字符串;在iOS和Windows平台上则没有限制。
  • OnCrashExtraDataNotify 仅在Android平台上有效,它的作用是补充上传byte[]类型的数据。它会在崩溃和错误发生时被调用。
  • OnCrashSetLogPathNotify 会在崩溃发生时被调用,它的返回值须为崩溃附件的绝对路径。使用时需要保证文件的访问权限。仅Android和iOS平台有效,Windows平台可用SetLogPath接口直接设置附件路径。
  • OnCrashLogUploadResultNotify 会在附件上传完毕时被调用,上传成功时result为0。仅Android和iOS平台有效。

用户登录

在用户登录成功后,插入如下代码,变更userid,并记录相关信息

    const char* user_id = "user_id";
CrashSightAgent::SetUserId(user_id);// 推荐:设置用户id
CrashSightAgent::PrintLog(LogSeverity::LogInfo, "Login finished, user_id: %s", user_id);// 可选:打印自定义日志
CrashSightAgent::SetUserValue("login_data", "登录数据");// 可选:添加自定义数据

上报错误

在可能产生错误信息的位置插入如下代码,主动上报错误

    CrashSightAgent::ReportException(5, "name", "message", "stack", "extra message", false, 0, true, attach_file_path);

上报崩溃/错误

打包项目,运行,并触发崩溃和错误。常见的崩溃触发用例如下:

    int* a = NULL;
a[10000] = 5;

查看崩溃/错误信息

上报成功后,进入“崩溃分析”或“错误分析”页,可见对应上报信息。推荐的数据查看方式详解请见研发期实践