尝试...捕获块感染

时间:2013-02-07 23:31:15

标签: c# excel debugging testing try-catch

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

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

我认为我已经足够好地实现了它,我试图避免将调用包装到其他类或模块中,而是将块放在调用中,这样我就可以更准确地识别出谁在扔,我没有吞下任何东西,我在我记录了我感兴趣的信息后,总是抛出异常。

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

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

1 个答案:

答案 0 :(得分:0)

不,你不会偏离基地。我相信这是在编写加载项时处理错误的唯一方法。我自己在销售使用此模式的Outlook加载项。但有几点注意事项:

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

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

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

  4. 然后对这些说明发表了几点评论:

    1. 我确定你理解这一点,但你的评论“几乎每一行代码都被包裹起来(......)”让我想强调这一点。但是,是的,所有您的代码最终应该以{{1​​}} - 块结束,以便您可以记录您的异常。我完全不同意格雷格说这是“危险的”。危险的是不处理您的例外情况。

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

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