Delphi异常处理对话框

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。

Delphi异常处理对话框_第1张图片

2. 打开向导,设置单元名称。(注意不要和Form name冲突)

Delphi异常处理对话框_第2张图片

3. 设置邮箱地址和主题

Delphi异常处理对话框_第3张图片

4. 单击Next设置更多选项或按 Finish结束向导。

向导完成后会把窗体添加到当前项目中。我们可以打开窗体,把文字翻译成中文或其他语言。最大的妙处在于,我们不需要写一行初始化代码,就可以马上享受到它的好处。

看下面的演示程序:

procedure TfrmMain.btnTestClick(Sender: TObject);
begin
  DoSomething;
end;

procedure TfrmMain.DoSomething;
begin
  raise Exception.Create('Oops...');
end;

点击一下Test按钮看看效果

Delphi异常处理对话框_第4张图片

是不是比Delphi默认的那个对话框好看多了?单击一下Details按钮,我们还能看到更详细的调试信息。

Delphi异常处理对话框_第5张图片

大家看到了吗?窗体里面不仅有当前系统的 调用堆栈,还显示具体的 单元名称和具体的 行号。我们还会看到当前的系统环境,应用程序加载的模块及其版本,当前的活动控件等等。怎么样?很棒吧!其实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选项)

你可能感兴趣的:(Delphi)