Steamworks 文献库
Steam 错误报告
注意: Steam 错误报告仅支持 Windows 32 位应用程序。

概览

如果实现了 Steam 错误报告,那么在抛出 10 个类似异常后,Steam 将自动上传任何异常的小型转储文件。

您可以在 Steamworks 合作伙伴后端的错误报告页面上查看每次崩溃的详细信息。

小型转储始终会先存储在本地计算机上,随后再上传至 Steam。 如果您需要直接查看其中某个转储文件,一般可以在游戏的安装目录中找到。

如何实现

如果您已经在使用结构化异常处理,Steam 错误报告使用起来会很方便。

您必须对 Win32 _set_se_translator 函数进行挂钩,此函数会调用您所创建的用于处理小型转储的函数。 在该函数中您可以使用 SteamAPI_SetMiniDumpCommentSteamAPI_WriteMiniDump 通知 Steam 即将发生的崩溃。

示例

#ifdef _WIN32 #include <Windows.h> void MiniDumpFunction( unsigned int nExceptionCode, EXCEPTION_POINTERS *pException ) { // 您可在此创建并设置任意评论,嵌入到小型转储中, // 您可以写下用户正在玩的关卡、服务器上有多少玩家、 // 还有多少内存可用,等等…… SteamAPI_SetMiniDumpComment( "Minidump comment: SteamworksExample.exe/n" ); // 此处的 0 是生成版本 ID,我们不对其进行设置。 SteamAPI_WriteMiniDump( nExceptionCode, pException, 0 ); } int RealMain( HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow ) { __debugbreak(); return 0; } int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // 我们在这里所做的就是在设置好结构化异常转换器(se translator)后调用真正的主函数, // 这允许我们拦截到异常并将错误报告给 Steam。 // // 请注意,您必须正确设置编译器标志以启用结构化异常处理, // 才能使这种特定的设置方法生效。 if ( IsDebuggerPresent() ) { // 在调试时,我们要避免屏蔽异常(或向 Steam 报告异常!)。 // 如果您希望逐步调试异常处理程序,请在调试器外部运行游戏后 // 附加调试器。 return RealMain( lpCmdLine, hInstance, nCmdShow ); } _set_se_translator( MiniDumpFunction ); try // 此 try 块让结构化异常转换器得以运作。 { return RealMain( hInstance, lpCmdLine, nCmdShow ); } catch( ... ) { return -1; } } #endif

要求

错误报告 API 目前仅支持 Windows 上的 32 位应用程序。