2

我正在为一家公司开发一套 Excel 插件。我以前没有做过加载项,所以我对一些错综复杂的东西不是很熟悉。在交付我的第一个产品后,用户遇到了我在测试期间没有遇到/遇到/注意到的错误。此外,我很难从 Visual Studios 调试环境中复制它们。

我最终编写了一个轻量级的日志类,它从程序的各个部分接收消息。该程序并不庞大,因此并不是很多工作。但我最终得到的几乎每一行代码都包含在 Try...Catch 块中,这样我就可以记录用户环境中发生的事情。

我认为我实现得足够体面,我尽量避免包装对其他类或模块的调用,而是将块放在调用中,这样我可以更准确地识别谁在扔,而且我没有吞下任何东西,我总是扔记录我感兴趣的信息后出现异常。

我的问题是,基本上,这样可以吗?有没有更好的方法来解决这个问题?我离开基地了吗?

快速编辑:重要的是,它确实有效。我能够确定错误并解决它。

4

1 回答 1

0

不,你不是离谱。我相信这是编写插件时处理错误的唯一方法。我自己正在销售一个使用这种模式的 Outlook 加载项。不过有几点注意事项:

  1. 您只需要包装顶级方法,直接暴露给用户界面或由其他事件触发。

  2. 确保您的日志记录例程递归遍历异常树,同时记录 InnerExceptions。

  3. 您可以考虑显示某种错误表单,而不是重新抛出异常。

然后是对这些笔记的一些评论:

  1. 我相信你明白这一点,但你的评论“几乎每一行代码都被包装(...)”让我想强调这一点。但是,是的,您的所有代码最终都应该以catch (System.Exception)-block 结尾,以便您可以记录您的异常。我完全不同意格雷格说这是“危险的”。危险的是不处理您的异常。

  2. 如果你这样做,我认为你不需要“避免包装对其他类和模块的调用”,如果我理解正确的话。我发布了一个方便的扩展方法 GetAsString,它允许我在 github上记录我需要的内容。

  3. 在 Outlook 中,如果异常出现在 Outlook 本身,如果它发生在后台线程上,您的加载项可能会被禁用,甚至导致 Outlook 崩溃。Excel中不一样吗?因此,我竭尽全力不让我的申请出现任何异常。当然,您需要确保您的应用程序在此之后可以继续运行,或者允许正常关闭。

于 2013-02-08T08:46:45.240 回答