概览

经过这些年,Steam 已经成长为一款大型应用程序,提供多款调试用单独模块及方法。本文将尽量向您呈现这些模块与方法,帮助您充分利用 Steam 与 Steamworks,减少烦恼。

Steam 会自动将数个调试结果输出至日志文件夹,其他结果需通过 Steam 命令行参数 或 console_commands启用。

ISteamUtils::SetWarningMessageHook 可让 Steamworks 应用程序注册一种函数,从而在出错时使得 Steamworks API 将开发人员可读的错误信息发送至应用程序。大多数的 Stem API 都使用该函数,因此请记得将此连接,方便在出错时进行检查。

Steam 命令行参数

Steam 使用命令行参数来提供开发者详情。

  • -console – 启用 Steam 控制台。控制台提供额外调试信息,您也可以在控制台中使用Steam 控制台命令。在浏览器地址栏输入 steam://open/console,或通过 Windows 执行对话框均可启用 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/GetPersonaNam过于频繁。报告会于停用或重新开始记录时输出,因此如想获取报告,请按照以下步骤进行:

  • 输入“log_ipc my_exe_name.exe“。
  • 等待,或与游戏互动,以尝试重现问题,等等
  • 输入“log_ipc 0“。

输出示例:

Calls over the last 42144 milliseconds:
Process MethodCalls 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::BLoggedOn42652 9 42145
my_exe_name.exe IClientFriends::GetPersonaName38209 42145
my_exe_name.exe IClientUser::RequestEncryptedAppTicket2 21032441
my_exe_name.exe IClientUtils::GetAPICallResult2 21252441
my_exe_name.exe IClientUser::GetEncryptedAppTicket1 21362136

IPC 日志输出

完整的 IPC 日志将输出至您的 Steam 安装目录:logs\\ipc_SteamClient.log

Steam API调试的更多相关文章

  1. aliyun API 调试

    打开https://ai.aliyun.com/,登录阿里云账号,选择控制台,右侧标签中选择产品服务,选择自己需要的子标签(如图像识别),选择API调试,按要求填写表格. 其中请求Body参照API文 ...

  2. ASP.NET WEB API 调试

    ASP.NET WEB API 中的路由调试与执行过程跟踪 http://www.cnblogs.com/Irving/p/4305493.html 路由调试 RouteDebugger 是调试 AS ...

  3. .net core 配置Swagger 摆脱PostMan,你值得拥有这样的api调试方式

    废话不多说直接来看 第一步: 安装nuget包:Swashbuckle.AspNetCore.Swagger Swashbuckle.AspNetCore.SwaggerGen Swashbuckle ...

  4. 微信调试、API、AJAX的调试 SocketLog

    SocketLog适合Ajax调试和API调试, 举一个常见的场景,用SocketLog来做微信调试, 我们在做微信API开发的时候,如果API有bug,微信只提示"改公众账号暂时无法提供服 ...

  5. 调试钩取技术 - 记事本WriteFile() API钩取

    @author: dlive 0x01 简介 本章将讲解前面介绍过的调试钩取技术,钩取记事本的kernel32!WriteFile() API 调试钩取技术能进行与用户更具有交互性(interacti ...

  6. 能直接调试的开放API?这个API Hub绝了

    ​ 01 此前时不时会有一些研发小伙伴和我诉苦,说很多企业由于人力财力限制或者需求不强,会直接购买使用第三方的开放API,这样一来, 一则由于开放项目不是量身定制的,寻找自己合适的接口也要搜索调研蛮多 ...

  7. 这个API Hub厉害了,收录了钉钉企业微信等开放Api,还能直接调试

    01 此前时不时会有一些研发小伙伴和我诉苦,说很多企业由于人力财力限制或者需求不强,会直接购买使用第三方的开放API,这样一来, 一则由于开放项目不是量身定制的,寻找自己合适的接口也要搜索调研蛮多时间 ...

  8. 【开源】.Net Api开放接口文档网站

    开源地址:http://git.oschina.net/chejiangyi/ApiView 开源QQ群: .net 开源基础服务  238543768 ApiView .net api的接口文档查看 ...

  9. 【CTO讲堂】以API为核心的移动应用云大发展时代

    摘要:CTO线上讲堂5月20日正式登场,CTO俱乐部首期邀请到APICloud联合创始人兼CTO邹达与C粉之家微信群友一起聊聊如何快速玩转App开发,分享技术人的职场成长. 为了帮助IT从业者职业之路 ...

随机推荐

  1. ios中输入法把 内容顶起后 内容下不来问题

    之前是做一个日期选择的功能,引入了一个选择日期的插件,当input框获得焦点时,弹出日期选择框,但是,输入法页弹出来了,把选择日期的插件顶的老高了,很丑,于是我在网上查了个方法不让输入法弹出来,就是在 ...

  2. 检测到目标URL存在http host头攻击漏洞

    检测到目标URL存在http host头攻击漏洞 1.引发安全问题的原因 为了方便的获得网站域名,开发人员一般依赖于HTTP Host header.例如,在php里用_SERVER["HT ...

  3. 【叶问】 MySQL常用的sql调优手段或工具有哪些

     MySQL常用的sql调优手段或工具有哪些1.根据执行计划优化   通常使用desc或explain,另外可以添加format=json来输出更详细的json格式的执行计划,主要注意点如下:     ...

  4. 003-hive安装

    http://www.aboutyun.com/thread-6902-1-1.html http://www.aboutyun.com/thread-7374-1-1.html

  5. 802.11n 连接的建议设置是什么?

    这些是用于支持 802.11N 的英特尔无线适配器的默认设置. 这些建议采用的设置可以在英特尔® PROSet/ 无线软件的 高级菜单上找到. 属性 值 频带 2.4 的 802.11n 通道宽度 自 ...

  6. k皇后

    http://www.cnblogs.com/drizzlecrj/archive/2007/10/04/913703.html

  7. Linux小脚本

    将固定的换包步骤,做成脚本replacePackage.sh,赋予执行权限(chmod +x   replacePackage.sh).这样小小自动化也能节约时间呀. replacePackage.s ...

  8. drf频率组件

    1.简介 控制访问频率的组件 2.使用 手写一个自定义频率组件 import time #频率限制 #自定义频率组件,return True则可以访问,return False则不能访问 class ...

  9. [django]Django外键(ForeignKey)操作以及related_name的作用

    https://blog.csdn.net/hpu_yly_bj/article/details/78939748 related_name表面作用 加上 核心related_name作用 https ...

  10. python 调用阿里云服务器api创建服务器

    首先安装阿里云SDK pip install aliyun-python-sdk-core pip install aliyun-python-sdk-ecs 可以配合jenkins传递参数 #!/u ...