Как настроить сбор дампа Firebird в Windows
Кратко, есть 3 шага:
-
Если вы установили Firebird с опцией Guardian, отключите Firebird Guardian - установите его службу в состояние Disable и измените Firebird Server с ручного на автоматический.
-
Установите в firebird.conf параметр BugCheckAbort=1 (и раскомментируйте, если необходимо), затем перезапустите Firebird для применения.
-
Настройте и проверьте сбор дампов для исполняемого файла 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
Отключить WER
Ниже приведено подробное описание того, что нужно сделать для настройки вручную:
Для настройки 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
-
https://docs.microsoft.com/en-us/windows/desktop/wer/wer-settings
-
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]