Эта страница переведена машинным переводом. Читайте английский оригинал. English

Библиотека IBSurgeon

Как настроить сбор дампа Firebird в Windows

Кратко, есть 3 шага:

  1. Если вы установили Firebird с опцией Guardian, отключите Firebird Guardian - установите его службу в состояние Disable и измените Firebird Server с ручного на автоматический.

  2. Установите в firebird.conf параметр BugCheckAbort=1 (и раскомментируйте, если необходимо), затем перезапустите Firebird для применения.

  3. Настройте и проверьте сбор дампов для исполняемого файла Firebird в Windows Error Reporting (WER)

Важно!

Убедитесь, что в папке Firebird есть файлы с отладочной информацией (расширение *.pdb). В дистрибутиве 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, - имя папки, где будут храниться дампы. В ней должно быть достаточно свободного места (примерно в 2 раза больше объема оперативной памяти сервера, если вы используете 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]