Tato stránka byla strojově přeložena. Přečtěte si anglický originál. English

Knihovna IBSurgeon

Jak nakonfigurovat sběr dumpů Firebird v systému Windows

Stručně řečeno, postup má 3 kroky:

  1. Pokud máte Firebird nainstalovaný s volbou Guardian, zakažte Firebird Guardian - nastavte jeho službu na Disable a změňte Firebird Server z manuálního na automatický.

  2. Nastavte v firebird.conf parametr BugCheckAbort=1 (a v případě potřeby jej odkomentujte) a restartujte Firebird, aby se změna projevila.

  3. Nakonfigurujte a ověřte sběr výpisů (dumpů) pro spustitelný soubor Firebirdu v Windows Error Reporting (WER)

Důležité!

Ujistěte se, že máte v adresáři Firebirdu soubory s ladicími informacemi (přípona *.pdb). Distribuce HQbird Enterprise tyto soubory již obsahuje a pro komunitní Firebird lze tyto soubory stáhnout ze stránky pro stažení Firebirdu - použijte odkaz ke stažení s označením „debug“.

Následující soubory pdb by měly být umístěny:

pro Firebird 2.5.x:

fbclient.pdb, fbembed.pdb, fbserver.pdb, fb_inet_server.pdb - do složky bin\ Firebirdu

pro Firebird 3.x a Firebird 4.x:

fbclient.pdb a firebird.pdb - do kořenové složky Firebirdu;

engine12.pdb (pro 3.x) a engine13.pdb (pro 4.x) - do složky plugins\

Nastavení WER

Připravené soubory reg

Povolit WER

/download/dump/wer_fb_on2.reg

Zakázat WER

/download/dump/wer_fb_off.reg

Níže je podrobný popis toho, co je třeba udělat pro ruční nastavení:

Pro nastavení WER najděte v registru následující klíč

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

a otevřete jeho podklíče.

Zvýrazněte „ Windows Error Reporting“ a ujistěte se, že existuje parametr s názvem Disabled, typ REG_DWORD, a jeho hodnota je 0.

Otevřete jej.

Poznámka! Nezaměňujte tento klíč s HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Error Reporting (bez Windows za Microsoft\).

V klíči

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting

vytvořte (nebo pouze nastavte, pokud již existuje) parametr:

název: DontShowUI

typ: DWORD

hodnota: 1

Poté v otevřeném klíči

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting

najděte podklíč LocalDumps; vytvořte jej, pokud neexistuje.

Poté otevřete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.

WER umožňuje zadat společná a místní (soukromá) nastavení.

Obecně potřebujeme výpisy pro všechny procesy.

Za tímto účelem vytvořte parametry v podadresáři LocalDumps:

  • DumpFolder, REG_EXPAND_SZ, - název složky, kam se mají výpisy ukládat. Měla by mít dostatek volného místa (~2x velikost RAM serveru, pokud používáte SuperServer nebo SuperClassic). Také účty, které se používají ke spouštění služeb, jejichž výpisy se mají vytvářet, musí mít oprávnění pro tuto složku (proto může být síťové umístění špatnou volbou, protože účet LocalSystem, který Firebird používá, nemá práva pro přístup ke vzdáleným umístěním).
  • DumpCount, REG_DWORD, - maximální počet souborů výpisů (výpisy se budou po dosažení tohoto počtu rotovat), nastavte 2 nebo více
  • DumpType, REG_DWORD, - typ výpisu, musí být 2.

Když dojde k pádu, soubor výpisu bude vytvořen ve složce nakonfigurované v DumpFolder!

Další podrobnosti o nastavení 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

Jak ověřit vytváření výpisů (pouze když nejsou připojeni žádní skuteční uživatelé!)

Pro test sběru výpisů musíme vyvolat pád Firebirdu: stáhněte si /download/killudf/badudf.dll.7z

rozbalte a vložte badudf.dll do složky UDF ( nezapomeňte jej po testu odstranit!) a poté spusťte následující soubor 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

Kontaktujte nás

Pokud zaznamenáváte pády Firebirdu nebo jiné abnormální chování, kontaktujte nás prosím: [email protected]