【问题标题】:simple and naive delphi error handling简单天真的delphi错误处理
【发布时间】:2013-11-13 01:58:15
【问题描述】:

以下代码 sn-p 没有按我的预期工作,我认为这将显示我希望它显示的消息,而没有调试器异常通知“处理引发异常类 EAccessViolation 并带有消息”模块中地址 0045D9E7 的访问冲突XXXX'',但是程序和我想的相反。为什么会这样?

procedure TForm1.btn1Click(Sender: TObject);
begin
    try
    (WebBrowser1.Document as IHTMLDOCUMENT2).execCommand('Refresh',false,0);
    except
      ShowMessage('caught!');
    end;
end;

【问题讨论】:

  • 代码为什么要引发异常? WebBrowser1 未分配?文档未分配?外部异常?还有什么?
  • 不确定您在问什么——它的行为如何?你期望它做什么?您是否知道默认情况下调试器将始终显示异常?
  • @SertacAkyuz WebBrowser1 在刷新之前应该先导航到某个网站。
  • @world - 当然。它本可以做到这一点。在表单中创建..
  • @NickHodges 我希望它能做一些错误处理,在这种情况下是显示一条消息而不是显示调试器的通知。

标签: delphi error-handling twebbrowser


【解决方案1】:

除非调试器选项的“语言异常”中的“语言异常通知”未选中,或者“EAccessViolation”是同一对话框中要忽略的异常类型之一,否则调试器会暂停程序并立即显示异常引发语言异常。

请注意,根据documentation,如果选中“通知语言异常”复选框,则调试器将忽略“要忽略的异常类型”中的列表。然而,这似乎不是每个 Delphi 版本的情况。通过我的测试,D2007 符合忽略列表(即使未选中该框)。使用 XE2,我无法以任何方式忽略 EAccessViolation。

【讨论】:

  • @world - 不客气。关于第二段,事实上我不能让 XE2 以任何方式忽略 EAccessViolation。
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多