Cómo configurar la recopilación de volcados de Firebird en Windows
En resumen, hay 3 pasos:
-
Si ha instalado Firebird con la opción Guardian, desactive Firebird Guardian: configure su servicio en Deshabilitado y cambie Firebird Server de manual a automático.
-
Establezca en firebird.conf el parámetro BugCheckAbort=1 (y descomente, si es necesario), y reinicie Firebird para aplicarlo.
-
Configure y verifique la recopilación de volcados para el ejecutable de Firebird en Informes de errores de Windows (WER)
¡Importante!
Asegúrese de tener archivos con información de depuración (extensión *.pdb) en la carpeta de Firebird. La distribución HQbird Enterprise ya incluye estos archivos, y para Firebird comunitario, estos archivos se pueden descargar desde la página de descarga de Firebird: use el enlace de descarga con “debug”.
Los siguientes archivos pdb deben colocarse:
para Firebird 2.5.x:
fbclient.pdb, fbembed.pdb, fbserver.pdb fb_inet_server.pdb - en la carpeta bin\ de Firebird
para Firebird 3.x y Firebird 4.x:
fbclient.pdb y firebird.pdb - en la carpeta raíz de Firebird;
engine12.pdb (para 3.x) y engine13.pdb (para 4.x) - en la carpeta plugins\
Configuración de WER
Archivos reg listos para usar
Habilitar WER
Deshabilitar WER
A continuación se muestra la descripción detallada de lo que se debe hacer para configurarlo manualmente:
Para configurar WER, busque en el registro la siguiente clave
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
y abra sus subclaves.
Resalte " Informes de errores de Windows" y asegúrese de que exista un parámetro con el nombre Disabled, tipo REG_DWORD, y su valor sea 0.
Ábralo.
¡Nota! No confunda esta clave con HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Error Reporting (sin Windows después de Microsoft\).
En la clave
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
cree (o solo establezca si ya existe) el parámetro:
nombre: DontShowUI
tipo: DWORD
valor: 1
Luego, en la clave abierta
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
busque la subclave LocalDumps; créela si no existe.
Luego abra HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.
WER permite especificar configuraciones comunes y locales (privadas).
En general, necesitamos volcados para todos los procesos.
Para ello, cree parámetros en la subcarpeta LocalDumps:
- DumpFolder, REG_EXPAND_SZ, - nombre de la carpeta donde almacenar los volcados. Debe tener suficiente espacio libre (~2 veces la RAM del servidor si está ejecutando SuperServer o SuperClassic). Además, las cuentas que se utilizan para ejecutar los servicios que se van a volcar deben tener permisos para esta carpeta (por eso una ubicación de red puede ser una mala elección, ya que la cuenta LocalSystem, que utiliza Firebird, no tiene derechos para acceder a ubicaciones remotas).
- DumpCount, REG_DWORD, - número máximo de archivos de volcado (los volcados se rotarán al alcanzar ese número), establezca 2 o más
- DumpType, REG_DWORD, - tipo de volcado, debe ser 2.
¡Cuando ocurra un fallo, el archivo de volcado se creará en la carpeta configurada en DumpFolder!
Más detalles sobre la configuración de 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
Cómo verificar la creación de volcados (¡solo cuando no haya usuarios reales conectados!)
Para probar la recopilación de volcados, debemos provocar un fallo de Firebird: descargue /download/killudf/badudf.dll.7z
descomprima y coloque badudf.dll en la carpeta UDF ( ¡no olvide eliminarlo después de la prueba!) y luego ejecute el siguiente archivo 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
Contáctenos
Si está experimentando fallos de Firebird u otro comportamiento anormal, contáctenos: [email protected]