Documentazione di Steamworks
Debugging nell'API di Steamworks

Panoramica

Steam negli anni è cresciuto fino a diventare una grossa applicazione che fornisce molti diversi moduli e modi per eseguire il debug. Questa pagina ne elenca il più possibile per aiutarti a trarre il massimo vantaggio possibile da Steam e Steamworks senza complicarti troppo la vita.

Steam immette automaticamente un certo numero di debug nella cartella logs, mentre per ottenerne altri potresti dovere abilitarli con Parametri di riga di comando di Steam o Comandi della console di Steam.

L'utilizzo di ISteamUtils::SetWarningMessageHook consente a un'applicazione di Steamworks di registrare una funzione che permette all'API di Steamworks di presentare messaggi di errore leggibili da un essere umano attraverso l'applicazione quando qualcosa va storto. La maggior parte delle API di Steam la usano, quindi attivala e usala ogni volta che si verifica un errore.

Parametri di riga di comando di Steam

Steam usa parametri diriga di comando per esporre dettagli da sviluppatore.
  • -console: abilita la console di Steam. La console fornisce informazioni di debugging addizionali e ti consente di usare Comandi della console di Steam. La console può essere abilitata anche andando su steam://open/console su un browser o attraverso la finestra di dialogo Esegui di Windows.
  • -debug_steamapi: abilita il debugging dell'API di Steamworks. Richiesto solo se vuoi usare ISteamUtils::SetWarningMessageHook!
  • -lognetapi: registra tutte le informazioni di rete P2P su log/netapi_log.txt.
  • -log_voice: scrive i dati delle chat vocali sul file logs/voice_log.txt.
  • -installer_test: fa sì che l'installazione di un gioco acquistato in un negozio fisico posizioni tutti i file nella cartella install_validate/ invece che sulla cache di Steam.

Comandi della console di Steam

Oltre a fornire output addizionali per inviare o registrare errori, la console di Steam può essere usata anche per fare eseguire ordini al client o ai server di Steam. Di seguito sono elencati alcuni comandi utili a scopo di debugging.
  • find <string>: ti consente di trovare altri comandi utili.
  • set_spew_level: ti consente di impostare un livello maggiore di output nella console di Steam e di registrare file. Ad esempio, "set_spew_level 4 4" fornisce i registri più lunghi ed è molto utile per risolvere problemi.
  • app_info_print <AppID>: mostra tutte le informazioni che i server di Steam forniscono sul gioco.
  • enable/disable_license <PackageID>: consente di testare il possesso di un'applicazione, solitamente un DLC.
  • testappcloudpaths <AppID>: consente il testing di una configurazione automatica per il cloud prima di abilitarla per tutti i clienti. Questo comando funziona solo per un appID alla volta e deve essere eseguito su un ogni client che si sta utilizzando per il test.
  • log_callbacks <first callbackID> <last callbackID>: registra sulla console tutte le callback.
  • log_matchmaking_callbacks <0|1>: abilita/disabilita la registrazione delle callback riguardanti il matchmaking.
  • log_ipc <counts|verbose> <filter>: vedi Registri dell'API di Steamworks.

Registri dell'API di Steamworks

Il comando log_ipc (da inserire nella console di Steam) effettua il dump di tutte le chiamate IPC eseguite sulle interfacce interne del client di Steam. Il comando richiede un parametro di filtro, che può essere l'interfaccia che vuoi monitorare il nome del processo. Nota c he i nomi forniti non coincidono sempre al 100% con la versione ISteam*, ma sono di solito molto simili. Specificare "counts" o "verbose" è facoltativo e il valore predefinito è "counts".

Lo stream predefinito ha questo aspetto:
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],

Monitoraggio di un'interfaccia specifica

Se stai cercando di tracciare un problema specifico, filtra log_ipc per l'interfaccia specifica.

Ad esempio: log_ipc IClientUser.

Esempio di output:
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 Report

Un rapporto roll-up è disponibile con il comando log_ipc nel client di Steam.

Questo rapporto ti consente di vedere rapidamente un sommario di chiamate IPC. L'esempio qui sotto mostra come GetSteamID/BLoggedOn/GetPersonaName sia chiamato troppo spesso. Il rapporto viene generato quando la registrazione è stata disabilitata o riavviata, quindi per ottenere il seguente rapporto dovrai:

  • Inserire "log_ipc my_exe_name.exe"
  • Attendi o interagisci con il gioco per provare a riprodurre un errore
  • Inserisci "log_ipc 0"

Esempio di output:
Chiamate negli ultimi 42144 millisecondi: 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

Output del registro IPC

Il registro ICP viene generato nella directory di installazione di Steam: logs\ipc_SteamClient.log.