Цю сторінку перекладено машинним перекладом. Читайте англійський оригінал. 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 вже містить ці файли, а для спільної версії 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 від обсягу оперативної пам’яті сервера, якщо ви запускаєте 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]