Comment configurer la collecte de dumps Firebird sous Windows
En bref, il y a 3 étapes :
-
Si vous avez installé Firebird avec l’option Guardian, désactivez Firebird Guardian - définissez son service sur Désactivé, et changez Firebird Server de manuel à automatique.
-
Définissez dans firebird.conf le paramètre BugCheckAbort=1 (et décommentez-le, si nécessaire), puis redémarrez Firebird pour appliquer.
-
Configurez et vérifiez la collecte des dumps pour l’exécutable Firebird dans Windows Error Reporting (WER)
Important !
Assurez-vous d’avoir les fichiers avec les informations de débogage (extension *.pdb) dans le dossier Firebird. La distribution HQbird Enterprise contient déjà ces fichiers, et pour Firebird communautaire, ces fichiers peuvent être téléchargés depuis la page de téléchargement Firebird - utilisez le lien de téléchargement avec “debug”.
Les fichiers pdb suivants doivent être placés :
pour Firebird 2.5.x :
fbclient.pdb, fbembed.pdb, fbserver.pdb fb_inet_server.pdb - dans le dossier bin\ de Firebird
pour Firebird 3.x et Firebird 4.x :
fbclient.pdb et firebird.pdb - dans le dossier racine de Firebird ;
engine12.pdb (pour 3.x) et engine13.pdb (pour 4.x) - dans le dossier plugins\
Configuration de WER
Fichiers reg prêts à l’emploi
Activer WER
Désactiver WER
Vous trouverez ci-dessous la description détaillée de ce qui doit être fait pour le configurer manuellement :
Pour configurer WER, recherchez dans le registre la clé suivante
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
et ouvrez ses sous-clés.
Mettez en surbrillance " Windows Error Reporting" et assurez-vous qu’il existe un paramètre nommé Disabled, de type REG_DWORD, et que sa valeur est 0.
Ouvrez-le.
Remarque ! Ne confondez pas cette clé avec HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Error Reporting (sans Windows après Microsoft\).
Dans la clé
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
créez (ou définissez uniquement si déjà créé) le paramètre :
nom : DontShowUI
type : DWORD
valeur : 1
Ensuite, sur la clé ouverte
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting
recherchez la sous-clé LocalDumps ; créez-la si elle n’existe pas.
Ouvrez ensuite HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.
WER permet de spécifier des paramètres communs et locaux (privés).
En général, nous avons besoin de dumps pour tous les processus.
Pour cela, créez des paramètres dans le sous-dossier LocalDumps :
- DumpFolder, REG_EXPAND_SZ, - nom du dossier où stocker les dumps. Il doit avoir suffisamment d’espace libre (~2x la RAM du serveur si vous exécutez SuperServer ou SuperClassic). De plus, les comptes utilisés pour exécuter les services à vider doivent avoir les permissions pour ce dossier (c’est pourquoi un emplacement réseau peut être un mauvais choix, car le compte LocalSystem, utilisé par Firebird, n’a pas les droits d’accès aux emplacements distants).
- DumpCount, REG_DWORD, - nombre maximal de fichiers de dump (les dumps seront recyclés après avoir atteint ce nombre), définissez 2 ou plus
- DumpType, REG_DWORD, - type de dump, doit être 2.
Lorsqu’un crash se produira, le fichier de dump sera créé dans le dossier configuré dans DumpFolder !
Plus de détails sur la configuration 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
Comment vérifier la création de dump (uniquement lorsqu’aucun utilisateur réel n’est connecté !)
Pour tester la collecte de dumps, nous devons provoquer un crash de Firebird : téléchargez /download/killudf/badudf.dll.7z
décompressez et placez le badudf.dll dans le dossier UDF ( n’oubliez pas de le supprimer après le test !) puis exécutez le fichier cmd suivant
@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
Contactez-nous
Si vous rencontrez des crashes de Firebird ou d’autres comportements anormaux, veuillez nous contacter : [email protected]