Como configurar a coleta de dumps do Firebird no Windows
Resumidamente, há 3 etapas:
-
Se você instalou o Firebird com a opção Guardian, desabilite o Firebird Guardian - defina o serviço como Desabilitado e altere o Firebird Server de manual para automático.
-
Defina no firebird.conf o parâmetro BugCheckAbort=1 (e remova o comentário, se necessário) e reinicie o Firebird para aplicar.
-
Configure e verifique a coleta de dumps para o executável do Firebird no Relatório de Erros do Windows (WER)
Importante!
Certifique-se de que você tenha arquivos com informações de depuração (extensão *.pdb) na pasta do Firebird. A distribuição HQbird Enterprise já inclui esses arquivos, e para o Firebird comunitário, esses arquivos podem ser baixados da página de download do Firebird - use o link de download com “debug”.
Os seguintes arquivos pdb devem ser colocados:
para Firebird 2.5.x:
fbclient.pdb, fbembed.pdb, fbserver.pdb fb_inet_server.pdb - na pasta bin\ do Firebird
para Firebird 3.x e Firebird 4.x:
fbclient.pdb e firebird.pdb - na pasta raiz do Firebird;
engine12.pdb (para 3.x) e engine13.pdb (para 4.x) - na pasta plugins\
Configurando o WER
Arquivos reg prontos para uso
Ativar WER
Desativar WER
Abaixo está a descrição detalhada do que deve ser feito para configurá-lo manualmente:
Para configurar o WER, encontre no registro a seguinte chave
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
e abra suas subchaves.
Destaque " Windows Error Reporting" e certifique-se de que existe um parâmetro com o nome Disabled, tipo REG_DWORD, e seu valor é 0.
Abra-o.
Nota! Não confunda esta chave com HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Error Reporting (sem Windows após Microsoft\).
Na chave
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
crie (ou apenas defina, se já criado) o parâmetro:
nome: DontShowUI
tipo: DWORD
valor: 1
Em seguida, na chave aberta
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
encontre a subchave LocalDumps; crie-a, se não existir.
Depois abra HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.
O WER permite especificar configurações comuns e locais (privadas).
Em geral, precisamos de dumps para todos os processos.
Para isso, crie parâmetros na subpasta LocalDumps:
- DumpFolder, REG_EXPAND_SZ, - nome da pasta onde armazenar os dumps. Ela deve ter espaço livre suficiente (~2x o tamanho da RAM do servidor se você estiver executando SuperServer ou SuperClassic). Além disso, as contas usadas para executar os serviços que serão despejados devem ter permissões para esta pasta (por isso, um local de rede pode ser uma má escolha, pois a conta LocalSystem, usada pelo Firebird, não tem direitos para acessar locais remotos).
- DumpCount, REG_DWORD, - número máximo de arquivos de dump (os dumps serão rotacionados após atingir esse número), defina 2 ou mais
- DumpType, REG_DWORD, - tipo de dump, deve ser 2.
Quando ocorrer uma falha, o arquivo de dump será criado na pasta configurada em DumpFolder!
Mais detalhes sobre a configuração do WER
-
https://docs.microsoft.com/en-us/windows/desktop/wer/wer-settings
-
https://docs.microsoft.com/en-us/windows/desktop/wer/collecting-user-mode-dumps
Como verificar a criação de dump (somente quando não houver usuários reais conectados!)
Para testar a coleta de dumps, precisamos provocar uma falha no Firebird: baixe /download/killudf/badudf.dll.7z
descompacte e coloque o badudf.dll na pasta UDF ( não se esqueça de removê-lo após o teste!) e então execute o seguinte arquivo cmd
@echo off
setlocal enabledelayedexpansion enableextensions
set fbc=C:\HQBird25.in
set dbnm=%~dp0tmptest.fdb.tmp
set usr=SYSDBA
set psw=masterkey
del !dbnm! 2>nul
echo create database 'localhost:!dbnm!' user '!usr!' password '!psw!'; | "!fbc!\isql.exe" -q -z
(
echo set echo on;
echo declare external function crashme
echo returns int by value
echo entry_point 'crashme' module_name 'badudf';
echo commit;
echo show function;
echo select crashme(^) from rdb$database;
) > %~dp0tmptest.sql.tmp
"!fbc!\isql.exe" localhost:!dbnm! -q -i %~dp0tmptest.sql.tmp -user !usr! -pas !psw!
del !dbnm!
del %~dp0tmptest.sql.tmp
Fale conosco
Se você estiver enfrentando falhas no Firebird ou outros comportamentos anormais, entre em contato conosco: [email protected]