Hoe Firebird dump-verzameling op Windows configureren
Kort samengevat zijn er 3 stappen:
-
Als je Firebird met de Guardian-optie hebt geïnstalleerd, schakel dan Firebird Guardian uit - stel de service in op Uitgeschakeld en wijzig Firebird Server van handmatig naar automatisch.
-
Stel in firebird.conf de parameter BugCheckAbort=1 in (en verwijder indien nodig de commentaar), en herstart Firebird om dit toe te passen.
-
Configureer en verifieer de dumpverzameling voor het Firebird uitvoerbare bestand in Windows Error Reporting (WER)
Belangrijk!
Zorg ervoor dat je bestanden met debug-informatie (extensie *.pdb) in de Firebird-map hebt. HQbird Enterprise-distributie bevat deze bestanden al, en voor community Firebird kunnen deze bestanden worden gedownload van de Firebird-downloadpagina - gebruik de downloadlink met “debug”.
De volgende pdb-bestanden moeten worden geplaatst:
voor Firebird 2.5.x:
fbclient.pdb, fbembed.pdb, fbserver.pdb fb_inet_server.pdb - naar de bin-map van Firebird
voor Firebird 3.x en Firebird 4.x:
fbclient.pdb en firebird.pdb - naar de hoofdmap van Firebird;
engine12.pdb (voor 3.x) en engine13.pdb (voor 4.x) - naar de map plugins\
WER instellen
Kant-en-klare reg-bestanden
WER inschakelen
WER uitschakelen
Hieronder volgt de gedetailleerde beschrijving van wat er moet gebeuren om dit handmatig in te stellen:
Om WER in te stellen, zoek je in het register de volgende sleutel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
en open de subkeys ervan.
Markeer " Windows Error Reporting" en zorg ervoor dat er een parameter is met de naam Disabled, type REG_DWORD, en dat de waarde 0 is.
Open het.
Let op! Verwar deze sleutel niet met HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Error Reporting (zonder Windows na Microsoft\).
In de sleutel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
maak je de parameter aan (of stel je deze alleen in als deze al bestaat):
naam: DontShowUI
type: DWORD
waarde: 1
Open vervolgens op de geopende sleutel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
de subkey LocalDumps; maak deze aan als deze niet bestaat.
Open daarna HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.
WER staat toe om algemene en lokale (privé) instellingen op te geven.
Over het algemeen hebben we dumps nodig voor alle processen.
Maak hiervoor parameters aan in de submap LocalDumps:
- DumpFolder, REG_EXPAND_SZ, - mapnaam waar dumps moeten worden opgeslagen. Deze moet voldoende vrije ruimte hebben (~2x de hoeveelheid RAM van de server als je SuperServer of SuperClassic draait). Ook moeten accounts die worden gebruikt om services uit te voeren die gedumpt moeten worden, rechten hebben voor deze map (daarom kan een netwerklocatie een slechte keuze zijn, omdat het LocalSystem-account, dat door Firebird wordt gebruikt, geen rechten heeft om toegang te krijgen tot externe locaties).
- DumpCount, REG_DWORD, - maximaal aantal dumpbestanden (dumps worden geroteerd nadat dit aantal is bereikt), stel 2 of meer in
- DumpType, REG_DWORD, - dumptype, moet 2 zijn.
Wanneer een crash optreedt, wordt het dumpbestand gemaakt in de map die is geconfigureerd in DumpFolder!
Meer details over WER-instellingen
-
https://docs.microsoft.com/en-us/windows/desktop/wer/wer-settings
-
https://docs.microsoft.com/en-us/windows/desktop/wer/collecting-user-mode-dumps
Hoe de dumpcreatie te controleren (alleen wanneer er geen echte gebruikers zijn verbonden!)
Om de dumpverzameling te testen, moeten we een Firebird-crash veroorzaken: download /download/killudf/badudf.dll.7z
pak uit en plaats badudf.dll in de map UDF ( vergeet niet om het na de test te verwijderen!) en voer daarna het volgende cmd-bestand uit
@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
Neem contact met ons op
Als je Firebird-crashes of ander abnormaal gedrag ervaart, neem dan contact met ons op: [email protected]