Документация Steamworks
Отчёты об ошибках
Внимание: отчёты об ошибках доступны только для 32-битных приложений для Windows.

Введение

Если отчёты об ошибках подключены, Steam автоматически будет загружать минидампы с теми или иными исключениями после того, как они возникли 10 раз.

Подробности каждого сбоя доступны на странице отчётов об ошибках на партнёрском сайте Steamworks.

Минидампы всегда хранятся на компьютере пользователя, прежде чем они загружаются в Steam. Если вам нужно изучить один из них напрямую, их можно найти в папке, куда установлены игры.

Реализация

Отчёты об ошибках легко использовать, если вы уже пользуетесь инструментом структурированной обработки исключений (Structured Exception Handling).

Вам потребуется подключить функцию _set_se_translator (Win32), которая будет вызывать функцию, которую вы создадите для обработки минидампов. В этой функции вы можете использовать SteamAPI_SetMiniDumpComment и SteamAPI_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 ) { // Всё, что здесь делается — вызов реальной основной функции после настройки _set_se_translator // Это позволяет отлавливать исключения и передавать сообщения об ошибках в Steam. // // Обратите внимание, что для структурированной обработки исключений // флаги компилятора должны быть настроены корректно. if ( IsDebuggerPresent() ) { // При отладке мы не хотим маскировать исключения (или отправлять их в Steam!). // Если вы хотите пошагово пройти все строки обработчика исключений, // подключите отладчик после запуски игры вне отладчика. return RealMain( lpCmdLine, hInstance, nCmdShow ); } _set_se_translator( MiniDumpFunction ); try // это обеспечит работу SE translator { return RealMain( hInstance, lpCmdLine, nCmdShow ); } catch( ... ) { return -1; } } #endif

Требования

API отчётов об ошибках в данный момент работает только с 32-битными приложениями на Windows.