Documentación de Steamworks
Depuración de la API de Steamworks

Introducción

Con el paso de los años, Steam se ha convertido en una aplicación muy grande y cuenta con muchos módulos separados y distintos métodos de depuración. Esta página describe de manera esquemática todos los posibles, para ayudarte a sacar el máximo partido a Steam y a Steamworks sin demasiados dolores de cabeza.

Steam envía automáticamente una serie de mensajes de depuración a la carpeta logs; para otros puede que necesites usar Parámetros de línea de comandos de Steam o Comandos de la consola de Steam para habilitarlos.

El uso de ISteamUtils::SetWarningMessageHook permite a la aplicación de Steamworks registrar una función que, a su vez, permite a la API de Steamworks enviar a la aplicación mensajes de error cuando algo sale mal. La mayoría de las API de Steam la usan, así que asegúrate de configurarla y comprobarla cada vez que algo vaya mal.

Parámetros de línea de comandos de Steam

Steam usa parámetros de línea de comandos para exponer datos de desarrollador.
  • -console: Activa la consola de Steam. La consola proporciona información de depuración adicional y te permite usar Comandos de la consola de Steam. También se puede habilitar abriendo steam://open/console en un navegador o a través del diálogo Ejecutar de Windows.
  • -debug_steamapi: Habilita la depuración de la API de Steamworks. ¡Esto es necesario si deseas utilizar ISteamUtils::SetWarningMessageHook!
  • -lognetapi: Registra toda la información de redes P2P en log/netapi_log.txt.
  • -log_voice: Escribe datos de chat de voz en el archivo logs/voice_log.txt.
  • -installer_test: Cambia la instalación de un juego comprado en tienda para colocar todos los archivos en la carpeta install_validate/ en lugar de en la caché de Steam.

Comandos de la consola de Steam

Además de proporcionar salidas adicionales para el registro o informe de errores, la consola de Steam sirve también para enviar comandos a los servidores o el cliente de Steam. He aquí algunos comandos útiles a efectos de depuración:
  • find <string>: Te permite encontrar otros comandos útiles.
  • set_spew_level: Te permite establecer mayor nivel de detalle en la consola de Steam así como también en los archivos de registro. Por ejemplo, "set_spew_level 4 4" proporciona el registro más detallado y es muy útil a la hora de solucionar problemas.
  • app_info_print <AppID>: Muestra toda la información que los servidores de Steam proporcionan sobre el juego.
  • enable/disable_license <PackageID>: Permite probar la propiedad de la aplicación, generalmente un DLC.
  • testappcloudpaths <AppID>: Permite probar la configuración auto-cloud antes de habilitarla para todos los usuarios. Este comando funciona solo con un id. de aplicación a la vez y se debe ejecutar con cada cliente que se quiera probar.
  • log_callbacks <first callbackID> <last callbackID>: Registra todas las funciones callback en la consola.
  • log_matchmaking_callbacks <0|1>: Habilita/inhabilita el registro de funciones callback de emparejamiento.
  • log_ipc <counts|verbose> <filter>: Consulta el Registro de la API de Steamworks.

Registro de la API de Steamworks

El comando log_ipc (introducido en la consola de Steam) vuelca todas las llamadas IPC realizadas a las interfaces internas del cliente de Steam. El comando lleva un parámetro de filtrado, que puede ser la interfaz que te interesa supervisar o el nombre del proceso. Ten presente que los nombres proporcionados no siempre coinciden exactamente con la versión ISteam*, pero son muy similares. Se puede especificar "counts" o "verbose". Si no se hace, se escoge la primera de forma predeterminada.

Normalmente, la secuencia predeterminada adopta un aspecto como este:
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],

Supervisión de interfaces concretas

Si quieres localizar un problema concreto, filtra el log_ipc con la interfaz específica.

Ejemplo: log_ipc IClientUser

Ejemplo del resultado:
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],

Informe IPC

Se puede obtener un informe consolidado con el comando log_ipc en el cliente de Steam.

El informe consolidado permite ver de manera rápida un resumen de llamadas IPC. El ejemplo siguiente revela que GetSteamID/BLoggedOn/GetPersonaName está recibiendo llamadas con demasiada frecuencia. El informe se muestra cuando la entrada en el registro se ha deshabilitado o reiniciado, de manera que, para obtener el informe siguiente, tendrías que:

  • Introducir: "log_ipc my_exe_name.exe".
  • Esperar o interactuar con el juego para intentar que se reproduzca el problema o incidencia.
  • Introducir: "log_ipc 0".

Ejemplo de salida:
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

Salida del registro IPC

El registro completo de IPC se envía a tu directorio de instalación de Steam: logs\ipc_SteamClient.log