Ta strona została przetłumaczona maszynowo. Przeczytaj oryginał angielski. English

Biblioteka IBSurgeon

Jak skonfigurować zbieranie zrzutów Firebird w systemie Windows

Krótko mówiąc, są 3 kroki:

  1. Jeśli zainstalowałeś Firebirda z opcją Guardian, wyłącz Firebird Guardian - ustaw jego usługę na Disable, a Firebird Server zmień z ręcznego na automatyczny.

  2. Ustaw w firebird.conf parametr BugCheckAbort=1 (i odkomentuj, jeśli to konieczne), a następnie uruchom ponownie Firebirda, aby zastosować zmiany.

  3. Skonfiguruj i zweryfikuj zbieranie zrzutów dla pliku wykonywalnego Firebirda w Windows Error Reporting (WER)

Ważne!

Upewnij się, że masz pliki z informacjami debugowania (rozszerzenie *.pdb) w folderze Firebirda. Dystrybucja HQbird Enterprise już zawiera te pliki, a dla społecznościowego Firebirda te pliki można pobrać ze strony pobierania Firebirda - użyj linku do pobrania z “debug”.

Następujące pliki pdb powinny być umieszczone:

dla Firebird 2.5.x:

fbclient.pdb, fbembed.pdb, fbserver.pdb fb_inet_server.pdb - do folderu bin\ Firebirda

dla Firebird 3.x i Firebird 4.x:

fbclient.pdb i firebird.pdb - do głównego folderu Firebirda;

engine12.pdb (dla 3.x) i engine13.pdb (dla 4.x) - do folderu plugins\

Konfiguracja WER

Gotowe do użycia pliki reg

Włącz WER

/download/dump/wer_fb_on2.reg

Wyłącz WER

/download/dump/wer_fb_off.reg

Poniżej znajduje się szczegółowy opis tego, co należy zrobić, aby skonfigurować to ręcznie:

Aby skonfigurować WER, znajdź w rejestrze następujący klucz

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

i otwórz jego podklucze.

Zaznacz " Windows Error Reporting" i upewnij się, że istnieje parametr o nazwie Disabled, typu REG_DWORD, i jego wartość to 0.

Otwórz go.

Uwaga! Nie myl tego klucza z HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Error Reporting (bez Windows po Microsoft\).

W kluczu

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting

utwórz (lub tylko ustaw, jeśli już istnieje) parametr:

nazwa: DontShowUI

typ: DWORD

wartość: 1

Następnie, w otwartym kluczu

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting

znajdź podklucz LocalDumps; utwórz go, jeśli nie istnieje.

Następnie otwórz HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.

WER pozwala określić ustawienia wspólne i lokalne (prywatne).

Ogólnie rzecz biorąc, potrzebujemy zrzutów dla wszystkich procesów.

W tym celu utwórz parametry w podfolderze LocalDumps:

  • DumpFolder, REG_EXPAND_SZ, - nazwa folderu, w którym będą przechowywane zrzuty. Powinien mieć wystarczająco dużo wolnego miejsca (~2x wielkość pamięci RAM serwera, jeśli używasz SuperServer lub SuperClassic). Ponadto konta używane do uruchamiania usług, które mają być zrzucane, muszą mieć uprawnienia do tego folderu (dlatego lokalizacja sieciowa może być złym wyborem, ponieważ konto LocalSystem, używane przez Firebirda, nie ma praw dostępu do zdalnych lokalizacji).
  • DumpCount, REG_DWORD, - maksymalna liczba plików zrzutów (zrzuty będą rotowane po osiągnięciu tej liczby), ustaw 2 lub więcej
  • DumpType, REG_DWORD, - typ zrzutu, musi wynosić 2.

Gdy wystąpi awaria, plik zrzutu zostanie utworzony w folderze skonfigurowanym w DumpFolder!

Więcej szczegółów na temat konfiguracji 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 sprawdzić tworzenie zrzutu (tylko gdy żadni rzeczywiści użytkownicy nie są podłączeni!)

Aby przetestować zbieranie zrzutów, musimy sprowokować awarię Firebirda: pobierz /download/killudf/badudf.dll.7z

rozpakuj i umieść badudf.dll w folderze UDF ( nie zapomnij go usunąć po teście!), a następnie uruchom następujący plik 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

Skontaktuj się z nami

Jeśli doświadczasz awarii Firebirda lub innych nietypowych zachowań, skontaktuj się z nami: [email protected]