Trang này được dịch bằng máy. Đọc bản gốc tiếng Anh. English

Thư viện IBSurgeon

Cách cấu hình thu thập dump Firebird trên Windows

Tóm lại, có 3 bước:

  1. Nếu bạn đã cài đặt Firebird với tùy chọn Guardian, hãy vô hiệu hóa Firebird Guardian - đặt dịch vụ của nó thành Disable, và thay đổi Firebird Server từ manual sang automatic.

  2. Đặt trong firebird.conf tham số BugCheckAbort=1 (và bỏ comment, nếu cần), rồi khởi động lại Firebird để áp dụng.

  3. Cấu hình và xác minh việc thu thập dump cho tệp thực thi Firebird trong Windows Error Reporting (WER)

Quan trọng!

Hãy đảm bảo bạn có các tệp thông tin gỡ lỗi (phần mở rộng *.pdb) trong thư mục Firebird. Bản phân phối HQbird Enterprise đã có sẵn các tệp này, và đối với Firebird cộng đồng, các tệp này có thể tải xuống từ trang tải Firebird - sử dụng liên kết tải xuống có “debug”.

Các tệp pdb sau nên được đặt:

cho Firebird 2.5.x:

fbclient.pdb, fbembed.pdb, fbserver.pdb fb_inet_server.pdb - vào thư mục bin\ của Firebird

cho Firebird 3.x và Firebird 4.x:

fbclient.pdb và firebird.pdb - vào thư mục gốc của Firebird;

engine12.pdb (cho 3.x) và engine13.pdb (cho 4.x) - vào thư mục plugins\

Thiết lập WER

Các tệp reg sẵn sàng sử dụng

Bật WER

/download/dump/wer_fb_on2.reg

Tắt WER

/download/dump/wer_fb_off.reg

Dưới đây là mô tả chi tiết về những gì cần làm để thiết lập thủ công:

Để thiết lập WER, hãy tìm trong registry khóa sau

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

và mở các khóa con của nó.

Đánh dấu " Windows Error Reporting" và đảm bảo có tham số tên Disabled, loại REG_DWORD, và giá trị của nó là 0.

Mở nó.

Lưu ý! Đừng nhầm lẫn khóa này với HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Error Reporting (không có Windows sau Microsoft\).

Trong khóa

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting

tạo (hoặc chỉ đặt nếu đã tạo) tham số:

tên: DontShowUI

loại: DWORD

giá trị: 1

Sau đó, trên khóa đã mở

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting

tìm khóa con LocalDumps; tạo nó, nếu nó chưa tồn tại.

Sau đó mở HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.

WER cho phép chỉ định các cài đặt chung và cục bộ (riêng tư).

Nói chung, chúng ta cần dump cho tất cả các tiến trình.

Để làm điều này, hãy tạo các tham số trong thư mục con LocalDumps:

  • DumpFolder, REG_EXPAND_SZ, - tên thư mục nơi lưu trữ dump. Nó phải có đủ dung lượng trống (~2 lần RAM của máy chủ nếu bạn đang chạy SuperServer hoặc SuperClassic). Ngoài ra, các tài khoản được sử dụng để chạy các dịch vụ cần dump phải có quyền truy cập vào thư mục này (đó là lý do tại sao vị trí mạng có thể là lựa chọn tồi, vì tài khoản LocalSystem, được Firebird sử dụng, không có quyền truy cập vào các vị trí từ xa).
  • DumpCount, REG_DWORD, - số lượng tối đa các tệp dump (dump sẽ được xoay vòng sau khi đạt đến số đó), đặt 2 hoặc nhiều hơn
  • DumpType, REG_DWORD, - loại dump, phải là 2.

Khi sự cố xảy ra, tệp dump sẽ được tạo trong thư mục, được cấu hình trong DumpFolder!

Thêm chi tiết về thiết lập 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

Cách kiểm tra việc tạo dump (chỉ khi không có người dùng thực tế nào đang kết nối!)

Để kiểm tra việc thu thập dump, chúng ta cần kích hoạt sự cố Firebird: tải xuống /download/killudf/badudf.dll.7z

giải nén và đặt badudf.dll vào thư mục UDF ( đừng quên xóa nó sau khi kiểm tra!) rồi chạy tệp cmd sau

@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

Liên hệ với chúng tôi

Nếu bạn đang gặp sự cố Firebird hoặc hành vi bất thường khác, vui lòng liên hệ với chúng tôi: [email protected]