Documentation Steamworks
Débogage de l'API Steamworks

Présentation

Au fil des années, Steam s'est développée jusqu'à devenir une application complexe qui propose de nombreux moyens et modules distincts pour le débogage. Cette page décrit un bon nombre de ces solutions qui vous permettront de profiter au mieux de Steam et de Steamworks sans devoir vous casser la tête.

Steam produit automatiquement un certain nombre de traces de débogage dans le dossier logs. Pour les autres, vous pouvez utiliser Paramètres de ligne de commande Steam ou Commandes de la console Steam pour activer l'enregistrement.

L'utilisation de ISteamUtils::SetWarningMessageHook permet à une application Steamworks d'enregistrer une fonction autorisant l'API Steamworks à lui fournir des messages d'erreur en langage humain lorsque quelque chose se passe mal. La plupart des API Steam s'en servent, alors assurez-vous de vous y connecter et d'y jeter un œil chaque fois qu'un problème survient.

Paramètres de ligne de commande Steam

Steam emploie des paramètres de ligne de commande pour exposer les détails de développement.
  • -console : active la console Steam. Celle-ci fournit des informations supplémentaires pour la correction des bugs et vous permet d'utiliser Commandes de la console Steam. Elle peut également être activée en vous rendant sur steam://open/console dans un navigateur ou via la boite de dialogue Exécuter de Windows.
  • -debug_steamapi : active l'API Steamworks de correction de bugs. Celle-ci est nécessaire si vous souhaitez utiliser ISteamUtils::SetWarningMessageHook !
  • -lognetapi : consigne toutes les informations de mise en réseau pair-à-pair dans log/netapi_log.txt.
  • -log_voice : écrit les données du chat vocal dans le fichier logs/voice_log.txt.
  • -installer_test : modifie l'installation d'un jeu acheté dans un point de vente afin que tous les fichiers soient émis vers le dossier install_validate/ plutôt que dans le cache de Steam.

Commandes de la console Steam

En plus de fournir des résultats supplémentaires pour le signalement ou la consignation d'erreurs, la console Steam peut également servir à envoyer des commandes au client ou aux serveurs Steam. Voici quelques commandes utiles pour corriger les bugs.
  • find <string> : vous permet de trouver d'autres commandes utiles.
  • set_spew_level : vous permet de définir un niveau de résultats plus élevé dans la console Steam ainsi que dans les fichiers journaux. Exemple : « set_spew_level 4 4 » fournit la journalisation la plus documentée et est très utile pour la résolution de problèmes.
  • app_info_print <AppID> : affiche toutes les informations fournies à propos du jeu par les serveurs Steam.
  • enable/disable_license <PackageID> : cette commande vous permet de tester la propriété d'une application, généralement un DLC.
  • testappcloudpaths <AppID> : permet de tester la configuration de Steam Auto-Cloud avant de l'activer pour le public. Cette commande ne fonctionne que pour un AppID à la fois et doit être exécutée sur chaque client testé.
  • log_callbacks <first callbackID> <last callbackID> : consigne tous les rappels dans la console.
  • log_matchmaking_callbacks <0|1> : active/désactive la consignation des rappels de matchmaking.
  • log_ipc <counts|verbose> <filter> : consultez cette section.

Journalisation de l'API Steamworks

La commande log_ipc (saisie dans la console Steam) purge tous les appels IPC effectués vers les interfaces internes du client Steam. La commande demande un paramètre de filtrage, qui peut être l'interface que vous voulez surveiller ou le nom du processus. Remarque : les noms ne correspondent pas toujours lettre pour lettre à la version ISteam*, mais restent généralement très proches. Vous pouvez choisir de spécifier « counts » ou « verbose », « counts » étant l'option par défaut.

En général, le flux par défaut se décline comme suit :
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],

Supervision d'une interface spécifique

Si vous essayez de suivre un problème spécifique, réglez le filtrage de log_ipc sur l'interface spécifique.

Exemple : log_ipc IClientUser

Exemple de sortie :
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],

Rapport IPC

Un rapport cumulatif est disponible dans le client Steam avec la commande log_ipc.

Le rapport cumulatif vous permet de consulter le résumé des appels IPC. L'exemple ci-dessous montre que GetSteamID/BLoggedOn/GetPersonaName est appelée trop souvent. Le rapport est produit au moment de la désactivation ou du redémarrage de la journalisation. Ainsi, pour obtenir le rapport ci-dessous, vous devez :

  • saisir « log_ipc my_exe_name.exe » ;
  • attendre ou interagir avec le jeu pour essayer de reproduire le problème ;
  • saisir « log_ipc 0 ».

Exemple de sortie :
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

Sortie du journal IPC

Le journal IPC complet est consigné dans le répertoire d'installation Steam : logs\ipc_SteamClient.log.