Pular para o conteúdo principal

Solução de problemas

Como relatar um problema corretamente:​

Se você quiser fazer uma sugestão, registrar um erro ou uma falha sua, ou ainda precisar de ajuda "ao vivo", pode sempre recorrer a este endereço. Basta clicar no botão verde New issue e preencher o formulário.

Os desenvolvedores agradecem se a descrição do problema for o mais detalhada possível:

  • A versão do seu sistema operacional; A versão (número da build) do servidor HLDS (ou do ReHLDS);
  • A versão do seu jogo (ou mod);
  • A versão do Metamod-r (número ou data da build);
    • Você também pode informar a lista de módulos (digitando meta list no console do servidor).
  • Anexe os logs;
  • Anexe os crashdumps;

Isso ajuda em uma análise mais minuciosa e, possivelmente, na correção dos seus problemas no futuro.


Como obter dumps de travamento do HLDS\reHLDS​

Fonte principal (em russo). Espelho (em russo).

Não publique dumps abertamente na internet, porque eles costumam conter informações completas sobre o servidor, inclusive o rcon e afins. Para enviá-los, compacte-os com senha, o que também é útil porque eles comprimem muito bem.

Windows​

Usando o WER (Relatório de Erros do Windows):​

  • Ative o WER (relatórios de erro):
  • Antes do Vista:
  • Execute o drwtsn32.exe e escolha "Full" ao lado de Crash Dump File. Ali você também vê (ou configura) onde os dumps serão guardados.
  • No Vista e posteriores:
  • Editando o registro, um método prático do s1lent:

Um jeito detalhado e rápido de configurar o registro para receber dumps, voltado a iniciantes.​

  • Configurações:
  • NAME_APP - hlds.exe
  • nome da aplicação que precisará gerar dumps em caso de travamento.
  • REG_LINK - HKLM\Software\Microsoft\Windows\Windows Error Reporting
  • caminho para a seção do Windows Error Reporting (esta configuração provavelmente não precisa ser alterada; creio que os caminhos sejam os mesmos em todas as versões do Windows)
  • DumpType - 2
  • 0 - Dump normal
  • 1 - Dump mínimo
  • 2 - Dump completo
  • DumpCount - 15
  • quantidade de dumps a criar; se o número de dumps na pasta ultrapassar esse valor, o dump antigo é apagado para dar lugar ao novo.
  • DumpFolder - C:\CrashDumps
  • caminho da pasta onde os dumps serão guardados.
  • (para evitar problemas, não use espaços nem caracteres cirílicos nos caminhos)
  • Instalação:
  • Baixe o arquivo compactado e extraia-o.

  • Execute o add_RegistryDumps.bat

  • Depois de gravar no registro, confirme que você ativou o serviço Windows Error Reporting.

  • Em seguida pressione as teclas Windows + R (a tecla Windows fica entre o ctrl e o alt), ou abra o cmd.exe, ou use Iniciar - Executar; logo depois digite gpedit.msc e veja a captura de tela.

Configuração do Computador -> Modelos Administrativos -> Componentes do Windows -> Relatório de Erros do Windows

Usando o utilitário userdumps​

  • Instruções de unKn0wn:

Método para obter dumps com o utilitário da Microsoft: UserModeProcessDumper \ espelho de "UserModeProcessDumper8_1_2929_5.zip".

Agradecimentos ao Lev pelas configurações.

1. Instalação​

Extraia o arquivo que você baixou (por padrão, em C:\kktools\userdump8.1).

  • Execute o arquivo setup.exe do diretório:
  • Se você usa o Windows XP/2003 de 32 bits, então C:\kktools\userdump8.1\x86.
  • Se você usa o Windows XP/2003 de 64 bits, então C:\kktools\userdump8.1\x64.
  • Na janela do assistente de instalação, clique em Next.
  • (Apenas em sistemas de 32 bits) Na janela Terminate Mode, escolha Disable "Dump on Process Termination" feature e clique em Next.

  • Clique em Finish e aguarde a conclusão da instalação. Na janela User Mode Process Dump Setup, clique no botão YES (se por algum motivo você não souber como abrir o menu de configurações do userdump, ele está sempre no Painel de Controle - Process Dumper).
2. Como adicionar uma aplicação​

Na janela Properties: User Mode Process Dumper Setup que se abre, clique em New, adicione o nome do programa desejado, por exemplo: hlds.exe (a extensão é obrigatória!) e clique em OK

3. Configurações​

Na janela Properties: User Mode Process Dumper Setup, localize a regra da aplicação que você acabou de criar, selecione-a e clique no botão Rules Na janela Process Monitoring Ruless for hlds.exe que se abre

  1. Escolha Use custom rules.
  2. Se necessário, mude a pasta onde os dumps criados serão guardados.
  3. Em Exception Codes, selecione (com o clique esquerdo) os seguintes códigos: "Access Violation, Overflow, Illegal Instruction, Stack overflow."
  4. Defina o parâmetro Save Mode como Cyclic saving (5 times). Deve ficar parecido com isto:

Obs.: recomendo usá-lo junto com o Dr Watson no tipo de dump "Brief", já que o Dr Watson mantém logs em formato de texto, o que permite escolher os dumps necessários. E o userdump gera os dumps completos.

Linux​

O servidor precisa ser iniciado com a flag -debug.

Se o gdb estiver instalado no sistema, informações claras sobre o erro são gravadas automaticamente no arquivo debug.log. Por isso, é recomendável instalá-lo (o comando depende do sistema usado; no Debian\Ubuntu é apt install gdb). Embora isso não seja obrigatório para gerar dumps, é bom fazê-lo sempre que possível, já que o local do travamento fica registrado no debug.log, o que permite dizer algo sobre o erro de imediato. Obter a mesma informação em outro sistema a partir de um arquivo de dump exigiria todos os binários do servidor.

Por padrão, o arquivo de dump se chama core, é gravado na pasta de trabalho e, portanto, será sobrescrito. Para evitar isso, você pode acrescentar o ID do processo ao nome:

echo 1 > /proc/sys/kernel/core_uses_pid

ou direcionar os dumps para /tmp:

echo /tmp/%e-%t-%p-%c.dmp > /proc/sys/kernel/core_pattern Mais informações aqui.

Execução sem sudo (como root; caso contrário, as configurações gerais do sistema devem estar definidas como unlimited):

ulimit -c unlimited && ./hlds_run -debug ...

Execução com sudo (como o usuário hlds):

ulimit -Hc unlimited && sudo -u hlds sh -c "ulimit -Sc unlimited && ./hlds_run -debug ..."

Verificação da execução com sudo:

ulimit -Hc unlimited && sudo -u hlds sh -c "ulimit -Sc unlimited && whoami && ulimit -Sc && ./hlds_run -debug ..."

mostra o nome do usuário sob o qual a execução vai ocorrer e o limite de criação de dumps, e em seguida inicia o servidor.

Para testar as configurações de dump, você pode usar um módulo feito especialmente para isso: FixItAll \ espelho do FixItAll ou Crash.sma*.


Tabela-resumo:​

Pasta - o diretório do seu mod ou jogo. Nas colunas e estão os nomes dos arquivos executáveis da pasta dlls, que fica dentro do diretório do seu mod ou jogo.

❌ - não existe versão para essa plataforma

Jogo \ ModPasta
Action Half-Lifeactionahl.dllahl.so
Adrenaline Gameragag.dllag.so
openAGagag.dllag.so
Azure Sheepasheephl.dll❌
Base Defensebdefserver.dllserver.so
The Battle Groundsbgbg.dllbg.so
Brutal Half-Lifebhlbhl.dll❌
Brain Breadbrainbreadbb.dll❌
Half-Life: Blue Shiftbshifthl.dllbshift.so
Bumper Carsbumpercarshl.dll❌
BuzzyBotsbuzzybotsbb.dll❌
Chicken Fortress 3ckf3mp.dll❌
Counter-Strike 1.0cs10mp.dll❌
Counter-Strike 1.5csv15mp.dll❌
Counter-Strike 1.6cstrikemp.dllcs.so
Counter-Strike:Condition Zeroczeromp.dllcs.so
Counter-Strike:Condition Zero Deleted Scenesczerorcz.dllcz.so
Desert Crisisdcrisisdc.dlldc.so
Half-Life: Decaydecaydecay.dll❌
Deathmatch Classicdmcdmc.dlldmc.so
Day of Defeatdoddod.dlldod.so
Digital Paintballdpbpb.dllpb.i386.so
Earth's Special Forces (antigo)esfhl.dllhl.so (fica em linuxdll, e não no diretório dlls)
Earth's Special Forcesesfhl.dllhl.so
Existenceexistenceexistence.dll❌
Firearmsfirearmsfirearms.dll❌
Frontline Forcefrontlinefrontline.dllfront.so
Gangsta Warsgangstawarsgwars27.dll❌
Gangwarsgangwarsmp.dll❌
Opposing Forcegearboxopfor.dllopfor.so
Global Warfareglobalwarfaremp.dllgw.so
Goldeneyegoldeneyemp.dll❌
Headcrab Frenzyhcfrenzyhcfrenzy.dllhcfrenzy.so
Half-Life 1.5: Weapon Editionhl15wehl.dllhl.so
HL-Rallyhlrallyhlrally.dllhlr.so
Holy Warsholywarsholywars.dllhl.so
Hostile Intenthostileintenthl.dllhl.so
International Online Socceriosios.dllios.so
Judgementjudgedmmp.dlljudge.so
Kanonballkanonballkanonball.dllhl.so
Monkeystrikemonkeystrikemonkey.dllms.so
Morbid InclinationMorbidPRmorbid.dllmorbid.so
Move In!moveinhl.dllhl.so
Master Sword Continuedmscms.dll❌
Natural Selectionnsns.dllns.so
Natural Selection Betanspns.dllns.so
Over Groundogog.dllog.so
Outlawsmodolhl.dllol.so
Operations 1942ops1942spirit.dllspirit.so
Open-Source Jailbreakosjbjail.dllosjb.so
Out Breakoutbreakhl.dll❌
Oz Deathmatchozmp.dllmp.so
Paintballpaintballmp.dllpb.so
Public Enemypenemype.dllpe.so
Point of No Returnponreturnmp.dllponr.so
Pirates, Vikings and Knightspvkhl.dllhl.so
Rocket Crowbar 2rc2rc2.dllrc2.so
Resident Evil : Cold Bloodrecbb2recb.dllrecb.so
Gunman Chroniclesrewolfgunman.dll❌
Ricochetricochetmp.dllricochet.so
Rocket Crowbarrockcrowbarrc.dllrc.so
Rival Speciesrspecieshl.dllhl.so
Scientist Huntscihuntshunt.dllshunt.so
The Shipshipship.dllship.so
Science & Industrysisi.dllsi.so
Snow-Warsnowsnow.dllsnow.so
StargateTC (antigo, 1.x)stargatetchl.dllhl.so
StargateTC (atualizado, 2.x)stargatetchl.dllstc.so
StargateTC (atualizado, 2.x)stargatetchl.dllstc_i386_opt.so
Sven Coop (antigo)svencoophl.dllhl.so
Sven Coop (Steam)svencoopserver.dllserver.so
Swarmswarmswarm.dllswarm.so
Team Fortress Classictfctfc.dlltfc.so
The Wastesthewastesthewastes.dllthewastes.so
Project Timelesstimelesstimeless.dllpt.so
Tour of Dutytodhl.dllhl.so
Train Hunterstrainhuntersth.dllth.so
The Specialiststsmp.dllts.so
The Trenchestttt.dlltt.so
Underworld Bloodlineunderworlduw.dlluw.so
Half-Lifevalvehl.dllhl.so
VampireSlayervsmp.dllvs.so
Wanted!wantedhlwanted.dllhl.so
Wizard Wars (Steam)wizardwarswizardwars.dllwizardwars.so
Wizard Wars Beta (Steam)wizardwars_betawizardwars.dllwizardwars.so
Wizard Wars (antigo)wizwarsmp.sohl.dll
WormsHLwormshlwormshl.dllwormshl.so
Zombie Paniczpmp.dllhl.so

Toda ajuda e contribuição ao projeto é bem-vinda. Quanto mais testes e retorno, mais forte fica o desenvolvimento do Metamod-r e dos outros produtos relacionados. Boa sorte!