Visão geral
O Steam tornou-se um aplicativo complexo ao longo dos anos, oferecendo vários módulos separados e muitas formas diferentes de depuração. Esta página detalha muitas dessas formas, ajudando a tirar proveito do Steam e Steamworks sem muitas dores de cabeça.
O Steam automaticamente salva alguns relatórios de depuração na pasta
logs
; para outros, pode ser necessário usar
Parâmetros de linha de comando do Steam ou
Comandos do console do Steam para ativá-los.
O uso da interface
ISteamUtils::SetWarningMessageHook permite que um aplicativo Steamworks registre uma função que permite que a API do Steamworks ofereça mensagens de erro legíveis ao aplicativo quando algo der errado. A maioria das APIs do Steam a usa, então não se esqueça de usá-la e dar uma olhada sempre que algo der errado.
Parâmetros de linha de comando do Steam
O Steam usa parâmetros de linha de comando para expor detalhes de desenvolvimento.
- -console — Ativa o console do Steam, que exibe dados de depuração adicionais e permite o uso de Comandos do console do Steam. Também pode ser ativado ao acessar o URI steam://open/console em um navegador ou pela janela Executar do Windows (Win + R);
- -debug_steamapi — Ativa a depuração da API do Steamworks. Obrigatório para o uso da interface ISteamUtils::SetWarningMessageHook!
- -lognetapi — Salva todos os dados de rede P2P no arquivo
log/netapi_log.txt
;
- -log_voice — Salva dados de conversa por voz no arquivo
logs/voice_log.txt
;
- -installer_test — Altera a instalação de um jogo de varejo para colocar os arquivos na pasta
install_validate/
e não no cache do Steam.
Comandos do console do Steam
Além de oferecer saída adicional para relatórios, o console do Steam pode ser usado para invocar comandos no cliente ou servidores Steam. Confira abaixo alguns comandos úteis para depuração.
- find <string> — Permite a busca por outros comandos úteis;
- set_spew_level — Permite definir um maior nível de saída no console do Steam, assim como arquivos de relatório. Ex.: "set_spew_level 4 4" — Ativa relatórios mais verbosos, sendo útil para solucionar problemas;
- app_info_print <ID do aplicativo> — Exibe todos os dados do jogo informados pelos servidores Steam;
- enable/disable_license <ID do pacote> — Permite o teste de titularidade de aplicativo, tipicamente conteúdo adicional;
- testappcloudpaths <ID do aplicativo> — Permite o teste de configurações de nuvem automática antes de ativá-la para todos os usuários. O comando só funciona para um ID de aplicativo por vez e precisa ser executado em todos os clientes que desejam testá-la;
- log_callbacks <ID do primeiro callback> <ID do último retorno de chamada> — Exibe todos os retornos de chamada no console;
- log_matchmaking_callbacks <0|1> — Ativa/Desativa a exibição de retornos de chamada da criação de partidas;
- log_ipc <counts|verbose> <filter> — Consulte Relatórios da API do Steamworks.
Relatórios da API do Steamworks
O comando log_ipc (no console do Steam) exibe todas as chamadas IPC (comunicação entre processos) feitas às interfaces internas do Steam. O comando recebe um parâmetro "filter", que pode ser a interface que deseja monitorar ou o nome do processo. Observe que os nomes fornecidos nem sempre são iguais às versões ISteam*, mas costumam ser parecidos. Especificar "counts" ou "verbose" é opcional (padrão: counts).
O fluxo padrão costuma ser similar a:
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],
Monitoramento de uma interface específica
Se estiver tentando solucionar um problema específico, filtre o log_ipc para a interface em uso.
Ex.:
log_ipc IClientUser
Exemplo de saída:
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],
Relatório IPC
Um relatório de rollup está disponível ao comando log_ipc no cliente Steam.
O relatório de rollup exibe um resumo de chamadas IPC. O exemplo abaixo revela que a função GetSteamID/BLoggedOn/GetPersonaName é chamada demais. O relatório é exibido quando o uso de relatórios for desativado ou reiniciado; então, para recuperar o relatório abaixo é preciso seguir os seguintes passos:
- Digitar "log_ipc nome_do_meu_executavel.exe".
- Aguardar/Interagir com o jogo para tentar reproduzir um problema/etc.
- Digitar "log_ipc 0".
Exemplo de saída:
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
Saída do relatório IPC
O relatório IPC completo é salvo no diretório de instalação do Steam:
logs\ipc_SteamClient.log