Esta página foi traduzida por máquina. Leia o original em inglês. English

Biblioteca IBSurgeon

Como configurar a coleta de dumps do Firebird no Windows

Resumidamente, há 3 etapas:

  1. 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.

  2. Defina no firebird.conf o parâmetro BugCheckAbort=1 (e remova o comentário, se necessário) e reinicie o Firebird para aplicar.

  3. 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

/download/dump/wer_fb_on2.reg

Desativar WER

/download/dump/wer_fb_off.reg

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

  1. https://docs.microsoft.com/en-us/windows/desktop/wer/wer-settings

  2. 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]