- 如果您正在寻找获取一般异常信息(类、消息、地址等) - 请参阅如何获取异常信息?
- 如果您正在寻找获取异常的调用堆栈 - 请参阅如何获取异常的调用堆栈?
- 如果您正在寻找将报告文件保存到数据库或网络共享中(带有屏幕截图、附件、网页、转储等) - 请参阅如何保存报告而不是发送?
- 如果您想对错误报告文件进行操作 - 请参阅如何获取错误报告的文件名?
通常您不需要访问错误报告:
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.
例如,您应该用事件处理程序替换您的OnExceptionNotify
事件处理OnEndReportGen
程序。这个事件处理程序将像这样调用:
- 上传到数据库
- TBaseDialog.SaveBugReport
- TBaseDialog.Execute
- 显示异常
- 进程异常
- 异常管理器.句柄
- 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;