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!