Steamworks ドキュメンテーション
Steamworks APIのデバッグ

概要

Steamは年月を重ねるにつれて大規模なアプリケーションに成長し、多くの個別のモジュールと複数の異なるデバッグ方法を提供しています。 このページでは、面倒なことは最小限に抑え、SteamとSteamworksを最大限に活用できるように、できるだけ多くのデバッグ方法を説明します。

Steamは多数のデバッグ情報をlogsフォルダーに自動的に出力します。その他のデバッグ情報を得るには、SteamコマンドラインパラメーターSteamコンソールコマンドを使用する必要があります。

ISteamUtils::SetWarningMessageHookを使用すると、Steamworksアプリケーションで関数を登録できます。これによりSteamworks APIは、問題が発生した際に、アプリケーションに人間が読み取れるエラーメッセージを提供できます。 多くのSteam APIはこの関数を使用するため、必ずフックし、問題が発生した場合に確認してください。

Steamコマンドラインパラメーター

Steamは、コマンドラインパラメーターを使用して開発者に詳細を公開します。
  • -console-Steamコンソールを有効にします。 コンソールは追加のデバッグ情報を提供し、Steamコンソールコマンドを使用できるようにします。 これは、ブラウザーでsteam://open/consoleを開くか、Windowsの「実行」ダイアログを使用して有効にすることもできます。
  • -debug_steamapi-Steamworks APIデバッグを有効にします。 ISteamUtils::SetWarningMessageHookを使用したい場合は必須です!
  • -lognetapi-すべてのP2Pネットワーク情報をlog/netapi_log.txtに記録します。
  • -log_voicelogs/voice_log.txtファイルにボイスチャットデータを書き出します。
  • -installer_test-店頭購入ゲームのインストールを変更し、全ファイルをSteamキャッシュではなく、install_validate/フォルダーに出力するようにします。

Steamコンソールコマンド

エラー報告またはログ記録用の追加出力を提供することに加えて、Steamコンソールを使用してSteamクライアントまたはサーバーにコマンドを発行することもできます。 デバッグに役立ついくつかのコマンドを以下に紹介します。
  • find <string>-役に立つ他のコマンドを見つけます。
  • set_spew_level-ログファイルだけでなく、Steamコンソールで、より高いレベルの出力を設定できます。 例:"set_spew_level 4 4"-最も詳細なログを提供し、問題のトラブルシューティングに非常に役立ちます。
  • app_info_print <AppID>-Steamサーバーが提供するゲームに関するすべての情報を表示します。
  • enable/disable_license <PackageID>-アプリの所有権(通常はDLC)をテストできます。
  • testappcloudpaths <AppID>-すべてのユーザーに対して自動クラウドを有効にする前に、自動クラウド設定をテストできます。 このコマンドは一度に1つのApp IDに対してのみ機能し、テストする各クライアントで実行する必要があります。
  • log_callbacks <first callbackID> <last callbackID>-すべてのコールバックをコンソールに記録します。
  • log_matchmaking_callbacks <0|1>-マッチメイキングコールバックのログを有効/無効にします。
  • log_ipc <counts|verbose> <filter>Steamworks APIログを参照してください。

Steamworks APIログ

log_ipcコマンド(Steamコンソールに入力)は、Steamクライアントの内部インターフェイスに対して行われたすべてのIPC呼び出しをダンプします。 このコマンドは、監視対象のインターフェイスまたはプロセスの名前であるフィルターパラメーターを取ります。 指定された名前は、ISteam*バージョンと常に1:1で一致するわけではありませんが、大抵の場合、非常に近くなります。 "counts"または"verbose"の指定はオプションで、デフォルトはcountsです。

通常、デフォルトのストリームは次のようになります。
00000009 my_exe_name.exe:05 > IClientUser::GetSteamID( ) = [U:2:172006], 00000009 my_exe_name.exe:05 > IClientUser::BLoggedOn( ) = 1, 00000009 my_exe_name.exe:05 > IClientNetworking::IsP2PPacketAvailable( 0, ) = 0, 0, 00000009 my_exe_name.exe:05 > IClientNetworking::IsP2PPacketAvailable( 1, ) = 0, 0, 00000009 my_exe_name.exe:05 > IClientFriends::GetPersonaName( ) = "user", 00000009 my_exe_name.exe:05 > IClientUser::GetSteamID( ) = [U:2:123456],

特定のインターフェイスの監視

特定の問題を追跡したい場合は、log_ipcを特定のインターフェイスでフィルタリングします。

例:log_ipc IClientUser

出力例:
00000009 my_exe_name.exe:05 > IClientUser::GetSteamID( ) = [U:2:172006], 00000009 my_exe_name.exe:05 > IClientUser::BLoggedOn( ) = 1, 00000009 my_exe_name.exe:05 > IClientUser::GetSteamID( ) = [U:2:123456],

IPCレポート

ロールアップレポートは、Steamクライアントのlog_ipcコマンドから見ることができます。

ロールアップレポートからは、IPCコールの概要をすばやく確認できます。 以下の例では、GetSteamID/BLoggedOn/GetPersonaNameが頻繁に呼び出されていることがわかります。 レポートは、ログの記録を無効化または再開した時に出力されるため、以下のレポートを取得するには次の手順に従います。

  • "log_ipc my_exe_name.exe"を入力
  • ゲームを待機/操作して、問題の再現を試みる
  • "log_ipc 0"を入力

出力例:
Calls over the last 42144 milliseconds: Process Method Calls First Last -------------------- ---------------------------------------- ---------- ---------- ------- my_exe_name.exe IClientNetworking::IsP2PPacketAvailable 15272 9 42145 my_exe_name.exe IClientUser::GetSteamID 42652 9 42145 my_exe_name.exe IClientUser::BLoggedOn 42652 9 42145 my_exe_name.exe IClientFriends::GetPersonaName 3820 9 42145 my_exe_name.exe IClientUser::RequestEncryptedAppTicket 2 2103 2441 my_exe_name.exe IClientUtils::GetAPICallResult 2 2125 2441 my_exe_name.exe IClientUser::GetEncryptedAppTicket 1 2136 2136

IPCログ出力

完全なIPCログがSteamインストールディレクトリ(logs\ipc_SteamClient.log)に出力されます。