Steamworks ドキュメンテーション
Steamエラーレポート
注意:SteamのエラーレポートはWindows 32ビットアプリケーションにのみ対応しています。

概要

Steamのエラーレポートを実装した場合、Steamは同様の例外を10回スローした後に、自動的にすべての例外のミニダンプをアップロードします。

Steamworksパートナーのバックエンドのエラーレポートページで、各クラッシュの詳細を確認できます。

ミニダンプはSteamにアップロードされる前に、コンピューターのローカルディレクトリに保存されます。 その1つを直接検証する必要がある場合には、ゲームのインストールディレクトリでそのダンプを見つけてください。

実装方法

構造化例外処理を既に使用している場合、Steamのエラーレポートを簡単に使うことができます。

ミニダンプの処理用に作成した関数を呼び出すために、Win32 _set_se_translator関数を実装する必要があります。 その関数では、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 ) { // ここでの処理は、se translator設定後にRealMain関数を呼び出すだけです // これにより例外をキャッチし、エラーをSteamに通知することができます。 // // 注意:この特定の設定メソッドが機能するためには、コンパイラのフラグを正しく設定し // 構造化例外処理を使用可能にする必要があります。 if ( IsDebuggerPresent() ) { // デバッグ時に例外(またはSteamへの通知!)をマスクしたくありません。 // 例外ハンドラをステップスルーしたい場合は、ゲームをデバッガーの外で実行した後に // デバッガーをアタッチしてください。 return RealMain( lpCmdLine, hInstance, nCmdShow ); } _set_se_translator( MiniDumpFunction ); try // このtryブロックはSE translatorの動作を可能にします { return RealMain( hInstance, lpCmdLine, nCmdShow ); } catch( ... ) { return -1; } } #endif

要件

エラーレポートAPIは現在Windowsの32ビットアプリケーションにのみ対応しています。