So konfigurieren Sie die Firebird-Dump-Erfassung unter Windows
Kurz gesagt gibt es 3 Schritte:
-
Wenn Sie Firebird mit der Guardian-Option installiert haben, deaktivieren Sie Firebird Guardian - setzen Sie dessen Dienst auf „Deaktiviert“ und ändern Sie den Firebird-Server von „Manuell“ auf „Automatisch“.
-
Setzen Sie in der firebird.conf den Parameter BugCheckAbort=1 (und kommentieren Sie ihn bei Bedarf aus) und starten Sie Firebird neu, um die Änderung zu übernehmen.
-
Konfigurieren und verifizieren Sie die Dump-Erfassung für die Firebird-Ausführungsdatei in der Windows-Fehlerberichterstattung (WER)
Wichtig!
Stellen Sie sicher, dass sich Dateien mit Debug-Informationen (Erweiterung *.pdb) im Firebird-Ordner befinden. Die HQbird Enterprise-Distribution enthält diese Dateien bereits, und für Community-Firebird können diese Dateien von der Firebird-Download-Seite heruntergeladen werden - verwenden Sie den Download-Link mit „debug“.
Die folgenden PDB-Dateien sollten abgelegt werden:
für Firebird 2.5.x:
fbclient.pdb, fbembed.pdb, fbserver.pdb, fb_inet_server.pdb - in den bin-Ordner von Firebird
für Firebird 3.x und Firebird 4.x:
fbclient.pdb und firebird.pdb - in den Hauptordner von Firebird;
engine12.pdb (für 3.x) und engine13.pdb (für 4.x) - in den Ordner plugins\
Einrichtung von WER
Fertige REG-Dateien
WER aktivieren
WER deaktivieren
Nachfolgend finden Sie die detaillierte Beschreibung, was zur manuellen Einrichtung getan werden sollte:
Um WER einzurichten, suchen Sie in der Registrierung den folgenden Schlüssel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
und öffnen Sie dessen Unterschlüssel.
Markieren Sie „ Windows Error Reporting“ und stellen Sie sicher, dass es einen Parameter mit dem Namen Disabled, Typ REG_DWORD, gibt und dessen Wert 0 ist.
Öffnen Sie ihn.
Hinweis! Verwechseln Sie diesen Schlüssel nicht mit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Error Reporting (ohne Windows nach Microsoft\).
Im Schlüssel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
erstellen Sie (oder setzen Sie nur, falls bereits erstellt) den Parameter:
Name: DontShowUI
Typ: DWORD
Wert: 1
Dann, im geöffneten Schlüssel
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
finden Sie den Unterschlüssel LocalDumps; erstellen Sie ihn, falls er nicht existiert.
Öffnen Sie dann HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.
WER ermöglicht die Angabe von allgemeinen und lokalen (privaten) Einstellungen.
Im Allgemeinen benötigen wir Dumps für alle Prozesse.
Erstellen Sie dazu Parameter im Unterordner LocalDumps:
- DumpFolder, REG_EXPAND_SZ, - Ordnername, in dem die Dumps gespeichert werden. Er sollte genügend freien Speicherplatz haben (~2x die Größe des RAM des Servers, wenn Sie SuperServer oder SuperClassic ausführen). Außerdem müssen die Konten, die zum Ausführen der zu dumpenden Dienste verwendet werden, Berechtigungen für diesen Ordner haben (deshalb kann ein Netzwerkpfad eine schlechte Wahl sein, da das LocalSystem-Konto, das von Firebird verwendet wird, keine Rechte für den Zugriff auf entfernte Speicherorte hat).
- DumpCount, REG_DWORD, - maximale Anzahl von Dump-Dateien (Dumps werden nach Erreichen dieser Anzahl rotiert), setzen Sie 2 oder mehr
- DumpType, REG_DWORD, - Dump-Typ, muss 2 sein.
Wenn ein Absturz auftritt, wird die Dump-Datei in dem Ordner erstellt, der in DumpFolder konfiguriert ist!
Weitere Details zur WER-Einrichtung
-
https://docs.microsoft.com/en-us/windows/desktop/wer/wer-settings
-
https://docs.microsoft.com/en-us/windows/desktop/wer/collecting-user-mode-dumps
So überprüfen Sie die Dump-Erstellung (nur wenn keine echten Benutzer verbunden sind!)
Um die Dump-Erfassung zu testen, müssen wir einen Firebird-Absturz provozieren: Laden Sie /download/killudf/badudf.dll.7z herunter
Entpacken Sie die Datei und legen Sie badudf.dll in den Ordner UDF ( vergessen Sie nicht, sie nach dem Test zu entfernen!) und führen Sie dann die folgende CMD-Datei aus
@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
Kontaktieren Sie uns
Wenn Sie Firebird-Abstürze oder anderes ungewöhnliches Verhalten feststellen, kontaktieren Sie uns bitte: [email protected]