JEDI Code Library是Delphi社区最著名的开源代码库之一。今天我想跟大家分享的是JCL提供的一个向导:Jcl Exception Dialog for Delphi。
Exeption Dialog能截获运行时未处理的异常,并提供足够的调试信息(
调用堆栈、进程列表等等)。用户只要点击一个按钮就可以把错误报告发送到我们设定的邮箱。毫不夸张的说,Exception Dialog能够帮助我们以最快的速度找到问题。
下面以Delphi 2007为例,看看怎么创建和使用Exception Dialog。
0. 下载并安装
JEDI Code Library (JCL),可以同时支持Delphi的多个版本。
1. 打开项目后,依次点击New Items->Delphi Files->Jcl Exception Dialog for Delphi。
2. 打开向导,设置单元名称。(注意不要和Form name冲突)
3. 设置邮箱地址和主题
4. 单击Next设置更多选项或按
Finish结束向导。
向导完成后会把窗体添加到当前项目中。我们可以打开窗体,把文字翻译成中文或其他语言。最大的妙处在于,我们不需要写一行初始化代码,就可以马上享受到它的好处。
看下面的演示程序:
procedure TfrmMain.btnTestClick(Sender: TObject);
begin
DoSomething;
end;
procedure TfrmMain.DoSomething;
begin
raise Exception.Create('Oops...');
end;
点击一下Test按钮看看效果
是不是比Delphi默认的那个对话框好看多了?单击一下Details按钮,我们还能看到更详细的调试信息。
大家看到了吗?窗体里面不仅有当前系统的
调用堆栈,还显示具体的
单元名称和具体的
行号。我们还会看到当前的系统环境,应用程序加载的模块及其版本,当前的活动控件等等。怎么样?很棒吧!其实Exception Dialog还可以自动把这些信息记录到一个错误日志文件里面。
为了更好的发挥Exception Dialog的功能,我们可以把整个程序流程放在try-except里面,看看下面的示例代码:
begin
try
Application.Initialize;
Application.MainFormOnTaskbar := True;
// ...
Application.Run;
except
Application.HandleException(nil);
end;
end;
最后我再补充一下,调用堆栈的详细信息需要打开项目的
map file选项(Project Options->Linker->map file->Detailed)并把map文件和程序一起发布。(或者使用JCL的一个功能Projects->
Insert JCL Debug data,并打开Project Options->Complier->
USE Debug DCUs选项)