概览
经过这些年,Steam 已经成长为一款大型应用程序,提供多款调试用单独模块及多种方法。 本文将尽量向您呈现这些模块与方法,帮助您充分利用 Steam 与 Steamworks,减少烦恼。
Steam 会自动将数个调试结果输出至
日志
文件夹,其他结果需通过
Steam 命令行参数或
Steam 控制台命令 启用。
ISteamUtils::SetWarningMessageHook 可让 Steamworks 应用程序注册一个函数,从而在出错时使得 Steamworks API 将开发人员可读的错误信息发送至应用程序。 大多数的 Stem API 都使用该函数,因此请记得将此挂钩,方便在出错时进行检查。
Steam 命令行参数
Steam 使用命令行参数来提供开发者详情。
- -console - 启用 Steam 控制台。 控制台提供额外调试信息,您也可以在控制台中使用Steam 控制台命令。 在浏览器地址栏输入 steam://open/console,或通过 Windows Run 对话框均可启用 Steam 控制台。
- -debug_steamapi - 启用 Steamworks API 调试。 如您想使用 ISteamUtils::SetWarningMessageHook 则必须使用此命令!
- -lognetapi - 将所有 P2P 网络信息写入
log/netapi_log.txt
。
- -log_voice - 将语音聊天数据写入
logs/voice_log.txt
文件。
- -installer_test - 安装零售版游戏改为发送所有文件至
install_validate/
,而非 Steam 缓存。
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> - 可在允许所有顾客启动自动云前测试自动云配置。 此命令一次只能用于单一 AppID,且须在所有正在接受测试的客户端中执行。
- log_callbacks <first callbackID> <last callbackID> - 记录所有至控制台的回调。
- log_matchmaking_callbacks <0|1> - 启用或停用匹配回调记录。
- log_ipc <counts|verbose> <filter> - 请见 Steamworks API 记录。
Steamworks API 记录
(在 Steam 控制台输入的)log_ipc 命令会将对 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