概要
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_voice-
logs/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
)に出力されます。