Windows接入指引
本文是介绍Windows SDK使用的详细文档,包含了基本的接入流程和高级的接口使用介绍。本文档适用于2.2.1及以上版本,如果您正在使用低版本,推荐尽快升级。 查看版本的方法见查看dll版本号。
如果想快速接入,验证平台和SDK功能,建议查看项目菜单中的“接入指南”。引导中已经按项目具体的信息(平台,引擎,国内/海外,AppID)生成了针对此项目的初始化代码,可以直接复制使用。如下图所示:
项目创建:公司外部项目支持自助创建项目,但有免费试用时长。公司内部项目,企业微信联系“CrashSight小助手”开通。
1 使用说明
异常捕获上报服务CrashSight SDK Windows版,接入时,游戏客户端需要自己加载异常捕获的dll,并传入用户id及游戏版本等参数。 下表中列出了国内服及海外服的web地址及上报地址。用户可以选择qq登录或者企业微信登录:
版本区分 | Web地址 | 上报地址(配置文件中需要) |
---|---|---|
国内服 | https://crashsight.qq.com | pc.crashsight.qq.com |
海外服 | https://crashsight.wetest.net | pc.crashsight.wetest.net |
PS:海外版本及国内版本完全相同,只需要修改不同上报地址就可以上报到指定区域(注意相应的appid及key也需要对应做修改,否则服务器会拒绝)
2 CrashSight组件下载
新版CrashSight主要提供64位版本,32位版本和64位版本相比除文件名称不同外,功能及用法都是一致的。
在平台成功创建项目后,在侧边栏的“接入指南”中,可以下载到对应的SDK。如下图所示:
3 CrashSight接入
由于本SDK采用客户端直接加载dll的方式,具体接入方式如下:
-
登录web端注册项目,项目类型选择Windows,注册成功后会生成appid(如:0620edc732)
-
将提供的文件按说明放到指定位置,客户端在启动后加载同级目录下的CrashSight64.dll
-
C++中通过HINSTANCE dllDemo = LoadLibraryA("CrashSight64.dll");加载dll,其他语言使用语言对应的dll加载方式即可.
-
在初始化之前设置应用版本
typedef void(*CS_SetAppVersion)(const char *app_version);
- 配置上报URL(参考代码)调用如下函数,将上报URL传递给CrashSight。 国内环境URL:pc.crashsight.qq.com 海外环境URL:pc.crashsight.wetest.net
typedef void(*CS_ConfigCrashServerUrl)(const char* crash_server_url);
- 初始化CrashSight。调用如下函数,设置CrashSight appid并初始化。
typedef void(*CS_InitWithAppId)(const char* app_id);
- 当客户端配置完成后,正常启动游戏,发现游戏进程中存在CrashSight64.dll,说明CrashSight 加载启动成功。
4 CrashSight上报机制及数据字段
游戏客户端加载dll并调用导出函数后:
- 该dll会读取配置文件中的域名上报联网数据。
- 用于当dll捕获到崩溃异常时将dll生成的minidmp上报到服务端。
目前CrashSight上报的数据字段如下:
字段 | 说明 |
---|---|
userId | 用户id |
appId | 项目的注册id |
Mac | Mac地址 |
osName | 操作系统名称 |
displayCard | 显卡名称 |
Cpu | Cpu类型 |
phyMemAll | 机器内存 |
osBit | 机器位数 |
resolution | 分辨率 |
pidName | 进程名 |
bootTime | 启动时间 |
Ip | Ip地址 |
5 功能接口
5.1 错误上报
// 导入函数
typedef void(*CS_ReportException)(int type, const char* name, const char* message, const char* stackTrace, const char * extras, bool is_async, const char *error_attach_path);
CS_ReportException theReportException = (CS_ReportException)GetProcAddress(dllDemo, "CS_ReportException");
// 调用函数
theReportException(1, "name", "message", "stack", "{\"k1\":\"v1111\",\"k2\":\"v2222\",\"k3\":\"v3333\"}", true, "/path/to/your/attach/file");
// 导入函数
typedef void(*CS_ReportExceptionW)(int type, const char* name, const char* message, const char* stackTrace, const char * extras, bool is_async, const wchar_t *error_attach_path);
CS_ReportExceptionW theReportExceptionW = (CS_ReportExceptionW)GetProcAddress(dllDemo, "CS_ReportExceptionW");
// 调用函数
theReportExceptionW(1, "name", "message", "stack", "{\"k1\":\"v1111\",\"k2\":\"v2222\",\"k3\":\"v3333\"}", true, L"/path/to/your/attach/file");
(代码参考6. 参考代码)
参数 | 说明 |
---|---|
type | 默认填1即可 |
expName/expMessage | 错误名,请限制在128字节以内。(特别的,使用UE引擎,通过UTF8转 码的,尽可能限制在96字符内) |
expMessage | 问题简要的说明,请限制在128字节以内。(特别的,使用UE引擎,通过UTF8转码的,尽可能限制在96字符内) |
stackTrace | 当前错误的堆栈,仅限制在2M内 |
extras | 额外信息,需以json格式传入键值对,如无额外信息填“”即可 |
is_async | 控制同步/异步上报,一般情况下填true(异步) |
error_attach_path | 附件的绝对路径,可指定一个5M以内的附件 |
需要传入带中文的路径时,请使用宽字符版本(CS_ReportExceptionW)
5.2 设置回调
// 导入函数
typedef void(*CS_SetCrashCallback)(CrashCallbackFuncPtr callback);
CS_SetCrashCallback theSetCrashCallback = (CS_SetCrashCallback)GetProcAddress(dllDemo, "CS_SetCrashCallback");
// 调用函数
theSetCrashCallback(myCallback);