Cette page a été traduite automatiquement. Lisez l'original en anglais. English

Bibliothèque IBSurgeon

Comment configurer la collecte de dumps Firebird sous Windows

En bref, il y a 3 étapes :

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

  2. Définissez dans firebird.conf le paramètre BugCheckAbort=1 (et décommentez-le, si nécessaire), puis redémarrez Firebird pour appliquer.

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

/download/dump/wer_fb_on2.reg

Désactiver WER

/download/dump/wer_fb_off.reg

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

  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

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]