此页面为机器翻译。请阅读英文原文。 English

IBSurgeon 文库

如何在Windows上配置Firebird转储收集

简而言之,共3个步骤:

  1. 如果您安装了带Guardian选项的Firebird,请禁用Firebird Guardian - 将其服务设置为“禁用”,并将Firebird Server从“手动”改为“自动”。

  2. 在firebird.conf中设置参数 BugCheckAbort=1(如有必要,请取消注释),然后重启Firebird以生效。

  3. 在Windows错误报告(WER)中配置并验证Firebird可执行文件的转储收集。

重要!

请确保Firebird文件夹中有包含调试信息的文件(扩展名为 *.pdb)。HQbird Enterprise发行版已包含这些文件,对于社区版Firebird,可以从Firebird下载页面下载这些文件 - 请使用带有“debug”的下载链接。

应放置以下pdb文件:

适用于Firebird 2.5.x:

fbclient.pdb、fbembed.pdb、fbserver.pdb、fb_inet_server.pdb - 放入Firebird的bin\文件夹

适用于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(Microsoft\后面没有Windows)混淆。

在键

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,- 存储转储的文件夹名称。该文件夹应有足够的可用空间(如果您运行的是SuperServer或SuperClassic,约为服务器内存的2倍)。此外,用于运行需要转储的服务的账户必须具有该文件夹的权限(这就是为什么网络位置可能不是好的选择,因为Firebird使用的LocalSystem账户无权访问远程位置)。
  • 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]