Steamworks Documentation
Steam Error Reporting
Note: Steam Error Reporting is only supported for Windows 32-bit applications.

Overview

If Steam error reporting is implemented then Steam will automatically upload mini dumps of any exception after 10 similar exceptions are thrown.

You can view the details of each crash on the Error Reports page of the Steamworks Partner backend.

Mini-dumps are always stored locally on the computer before they are uploaded to Steam. If you need to examine one directly, you should be able to find it in the games install directory.

How to Implement

Steam error reporting is easy to use if you're already using Structured Exception Handling.

You must hook up the Win32 _set_se_translator function which calls a function you create to handle the minidump. In that function you can use SteamAPI_SetMiniDumpComment and SteamAPI_WriteMiniDump to notify Steam about the impending crash.

Example

#ifdef _WIN32 #include <Windows.h> void MiniDumpFunction( unsigned int nExceptionCode, EXCEPTION_POINTERS *pException ) { // You can build and set an arbitrary comment to embed in the minidump here, // maybe you want to put what level the user was playing, how many players on the server, // how much memory is free, etc... SteamAPI_SetMiniDumpComment( "Minidump comment: SteamworksExample.exe/n" ); // The 0 here is a build ID, we don't set it 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 ) { // All we do here is call the real main function after setting up our se translator // this allows us to catch exceptions and report errors to Steam. // // Note that you must set your compiler flags correctly to enable structured exception // handling in order for this particular setup method to work. if ( IsDebuggerPresent() ) { // We don't want to mask exceptions (or report them to Steam!) when debugging. // If you would like to step through the exception handler, attach a debugger // after running the game outside of the debugger. return RealMain( lpCmdLine, hInstance, nCmdShow ); } _set_se_translator( MiniDumpFunction ); try // this try block allows the SE translator to work { return RealMain( hInstance, lpCmdLine, nCmdShow ); } catch( ... ) { return -1; } } #endif

Requirements

The error reporting API currently only supports 32-bit applications on Windows.