Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Како конфигурисати прикупљање Firebird дампова на Windows-у

Укратко, постоје 3 корака:

  1. Ако сте инсталирали Firebird са Guardian опцијом, онемогућите Firebird Guardian - подесите његов сервис на Disable, и промените Firebird Server из manual у automatic.

  2. Подесите у firebird.conf параметар BugCheckAbort=1 (и уклоните коментар, ако је потребно), и рестартујте Firebird да би се применило.

  3. Конфигуришите и верификујте прикупљање дампова за Firebird извршну датотеку у Windows Error Reporting (WER)

Важно!

Уверите се да имате датотеке са информацијама за отклањање грешака (екстензија *.pdb) у Firebird фолдеру. HQbird Enterprise дистрибуција већ има ове датотеке, а за community Firebird, ове датотеке се могу преузети са Firebird странице за преузимање - користите линк за преузимање са “debug”.

Следеће pdb датотеке треба поставити:

за Firebird 2.5.x:

fbclient.pdb, fbembed.pdb, fbserver.pdb fb_inet_server.pdb - у bin\ фолдер Firebird-а

за Firebird 3.x и Firebird 4.x:

fbclient.pdb и firebird.pdb - у основни фолдер Firebird-а;

engine12.pdb (за 3.x) и engine13.pdb (за 4.x) - у фолдер plugins\

Подешавање WER-а

Готове reg датотеке

Омогући WER

/download/dump/wer_fb_on2.reg

Онемогући WER

/download/dump/wer_fb_off.reg

Испод је детаљан опис шта треба урадити да би се подесило ручно:

Да бисте подесили WER, пронађите у регистру следећи кључ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

и отворите његове подкључеве.

Означите " Windows Error Reporting" и уверите се да постоји параметар са именом Disabled, тип REG_DWORD, и да је његова вредност 0.

Отворите га.

Напомена! Немојте мешати овај кључ са HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Error Reporting (без Windows после Microsoft\).

У кључу

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting

креирајте (или само подесите ако је већ креиран) параметар:

име: DontShowUI

тип: DWORD

вредност: 1

Затим, на отвореном кључу

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting

пронађите подкључ LocalDumps; креирајте га, ако не постоји.

Затим отворите HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.

WER омогућава одређивање заједничких и локалних (приватних) подешавања.

У принципу, потребни су нам дампови за све процесе.

За ово, креирајте параметре у подфолдеру LocalDumps:

  • DumpFolder, REG_EXPAND_SZ, - име фолдера где ће се чувати дампови. Треба да има довољно слободног простора (~2x величине RAM-а сервера ако користите SuperServer или SuperClassic). Такође, налози који се користе за покретање сервиса који ће се дамповати морају имати дозволе за овај фолдер (зато мрежна локација може бити лош избор, јер LocalSystem налог, који користи Firebird, нема права приступа удаљеним локацијама).
  • DumpCount, REG_DWORD, - максимални број дамп датотека (дампови ће се ротирати након достизања тог броја), подесите 2 или више
  • DumpType, REG_DWORD, - тип дампа, мора бити 2.

Када дође до пада, дамп датотека ће бити креирана у фолдеру, конфигурисаном у DumpFolder!

Више детаља о 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

Како проверити креирање дампа (само када нема стварних корисника повезаних!)

Да бисмо тестирали прикупљање дампова, морамо изазвати пад Firebird-а: преузмите /download/killudf/badudf.dll.7z

распакујте и ставите badudf.dll у фолдер UDF ( не заборавите да га уклоните после теста!) и затим покрените следећу 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

Контактирајте нас

Ако имате Firebird падове или друга ненормална понашања, молимо вас да нас контактирате: [email protected]