如何从Delphi应用程序中查找发送错误报告的结果

如何从Delphi应用程序中查找发送错误报告的结果,delphi,exception-handling,return-code,madexcept,bug-reporting,Delphi,Exception Handling,Return Code,Madexcept,Bug Reporting,我找不到任何方法来确定是否可以从我的D2006应用程序发送错误报告。如果MadExcept可以提供某种类型的返回代码,我可以为用户提供一些关于可能出错的指导。问题是MadExcept无法合理地确定这一点。除了发送电子邮件外,还有一整串的事情可能会出错。如果MadExcept无法生成报告或发送电子邮件时出现即时问题,您将收到异常 电子邮件客户端显示消息,用户未点击发送 电子邮件客户端已损坏或配置错误 SMTP主机已损坏、损坏或丢失 您的客户在您订阅的RBL上(可能是在不知不觉中) 您客户端的域位

我找不到任何方法来确定是否可以从我的D2006应用程序发送错误报告。如果MadExcept可以提供某种类型的返回代码,我可以为用户提供一些关于可能出错的指导。

问题是MadExcept无法合理地确定这一点。除了发送电子邮件外,还有一整串的事情可能会出错。如果MadExcept无法生成报告或发送电子邮件时出现即时问题,您将收到异常

  • 电子邮件客户端显示消息,用户未点击发送
  • 电子邮件客户端已损坏或配置错误
  • SMTP主机已损坏、损坏或丢失
  • 您的客户在您订阅的RBL上(可能是在不知不觉中)
  • 您客户端的域位于RBL上或被阻止
  • 你的邮件系统会打嗝,你会丢失那封邮件

MadExcept提供的最好信息是“没有引发异常,发送可能正常”。

可能不是一个完整的解决方案,但是有用的信息:如果使用HTTP POST请求将bugreport发送到web服务器,MadExcept可以检测响应是否包含HTTP重定向头,在这种情况下,madExcept将启动默认web浏览器并加载重定向中给定的URL

因此,用户可以立即看到报告已被接收和存储


web服务器甚至可以分析bugreport,并提供其他信息,如“此bug已被发现,我们有一个应用程序的更新将修复它,您可以在此处下载”。(我为此编写了一个web应用程序,,它仍然可以进行测试)。

如果您的代码除了捕获异常外,还可以对异常做出反应,那么您的应用程序应该捕获并处理异常本身。MadExcept用于跟踪您不知道的、因此无法处理的问题。注意,不需要返回代码;如果您有机会检查,您应该已经捕获并处理了异常本身。具有诸如“无法联系SMTP服务器”、“无法中继”或(在web服务器上发布的情况下)“HTTP错误503”之类的结果状态信息,可以向用户显示或记录,这将是非常好的。当然,这不能在发生异常的位置使用。但它通常会传递给事件处理程序(如OnAfterSendReport),用户代码可以在其中决定如何处理信息。根据文档,RegisterExceptionHandler和eaContinueApplication可能是实现这一点的一种方法(在下一版本的madeexcept中)@Ken,我并不是说我在程序中处理异常。我假设我捕获了异常,并向用户显示了一个对话框,其中一个按钮发送错误报告。我想要的是知道它没有发送,以及为什么没有发送,这样我可以指示用户保存错误报告并手动发送电子邮件。您可以将我配置为自动保存错误报告(通过附加到现有报告或截断并启动新报告)以及提供发送它的机会。所以即使电子邮件失败,你也有一份报告的副本。@Ken。当然,我可以让我自动保存bug报告(当我捕获异常时,我可以自己保存),但我只是觉得能够弹出一个对话框说“我无法发送bug报告-您介意转到并发送到吗?”bugreports@mydomain.com“有趣的网络应用。你有没有可能愿意分享代码?如果你喜欢没有分析部分(我可以想象那里会有一些合适的东西)?@Marjan它不是Delphi,而是Java代码(一个在Google App Engine上运行的简单web应用程序),项目目前处于非活动状态,直到我找到一些赞助者:)好的,当你说“没有抛出异常”时,我如何确定?根据我的回忆,如果MadExcept引发异常,您的应用程序将关闭。但这是Madshi论坛/文档的优势所在。我建议继续问下去