- 如果您正在寻找获取一般异常信息(类、消息、地址等) - 请参阅How to get exception information?
- 如果您正在寻找获取异常的调用堆栈 - 请参阅 How to get exception's call stack?
- 如果您正在寻找将报告文件保存到数据库或网络共享中(带有屏幕截图、附件、网页、转储等) - 请参阅How to save report instead of sending?
- 如果您想对错误报告文件进行操作 - 请参阅How to get file name for the bug report?
通常您不需要访问错误报告:
EurekaLog 7.7.8.2
Application:
-------------------------------------------------------
1.1 Start Date : Wed, 17 Oct 2018 16:23:33 +0300
1.2 Name/Description: Project1.exe
1.3 Version Number :
1.4 Parameters :
1.5 Compilation Date: Wed, 17 Oct 2018 16:23:15 +0300
1.6 Up Time : 6 second(s) Exception:
------------------------------------------------------------------------
2.1 Date : Wed, 17 Oct 2018 16:23:39 +0300
2.2 Address : 012A03F0
2.3 Module Name : Project1.exe
2.4 Module Version:
2.5 Type : ERangeError
2.6 Message : Range check error at Unit1.Button1Click (Line 261)
2.7 ID : ABBB0630
2.8 Count : 1
...
使用上述使用案例之一就足够了。
但是,当您从 EurekaLog 6 迁移旧代码时,您想要访问简单错误报告的一个特定示例。错误报告已从 OnExceptionNotify 事件中删除,因为错误报告在 EurekaLog 中的异常处理之外不存在7(与 EurekaLog 6 不同)。例如,如果您决定不在 OnExceptionNotify 事件处理程序中处理异常 - 那么根本不会生成错误报告,从而节省处理时间。
如果您仍然想要 EurekaLog 6 样式的行为 - 那么可以随时从 Dialog.BugReport 属性中检索错误报告内容(这基本上是 LogBuilder.Report 属性的缓存)。例如:
uses
EException, // for TEurekaExceptionInfo
ELogBuilder; // for TBaseLogBuilder and RegisterEventEndReportGen
procedure UploadToDB(const ACustom: Pointer;
AExceptionInfo: TEurekaExceptionInfo;
ALogBuilder: TBaseLogBuilder;
var CallNextHandler: Boolean);
var
BugID: Cardinal;
Report: String;
begin
BugID := AExceptionInfo.BugID;
Report := ALogBuilder.Report;
// ... write bug report's content to your DB or
// do whatever you want with it
end;
initialization
RegisterEventEndReportGen(nil, UploadToDB, True);
end.
例如你应该用OnEndReportGen 事件处理程序替换你的OnExceptionNotify 事件处理程序。这个事件处理程序将被这样调用:
- 上传至数据库
- TBaseDialog.SaveBugReport
- TBaseDialog.Execute
- 显示异常
- 进程异常
- ExceptionManager.Handle
- Forms.TApplication.HandleException
或者,可以随时(按需)创建错误报告 - 使用 BuildBugReport 函数:
uses
EException, // for TEurekaExceptionInfo
ELogBuilder; // for BuildBugReport
var
EI: TEurekaExceptionInfo;
Report: String;
begin
try
// ...
except
on E: Exception do
begin
EI := ExceptionManager.Info(E);
// EI = nil for disabled EurekaLog
// or when exception is ignored
if Assigned(EI) then
begin
Report := BuildBugReport(EI);
// ... write bug report's content to your DB
// or do whatever you want with it
end;
end;
end;