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