当被要求修复程序中的错误时,你会发现超过100个实例

kar*_*l.r 25 .net c# debugging qa

catch(Exception ex)
{

}
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法?

将它们全部撕掉并让它崩溃?添加日志代码?留言箱?这是在C#中.

Jon*_*eet 23

这在一定程度上取决于你的积极程度.这个应用程序是内部还是外部?您的更改是否会很快部署在实时系统上?您是否有特定的错误需要修复,或者它只是被视为灾难?

为了尽可能快地减少错误数量,但是最大的损坏风险,只需删除所有捕获块并让异常冒泡.对于更精细的方法,只需添加日志记录即可.

如果可能的话,您还应该与编写应用程序的人交谈.试着找出为什么他们有这么多异常吞咽障碍.他们真的了解异常吗?这里需要一定的机智,我怀疑:)

下一站:单元测试......

  • 似乎很明显他们*不理解异常.他们想用.NET方式编写`ON ERROR RESUME NEXT`,然后他们就找到了. (9认同)
  • *"为什么我写这个?好吧,你看,我们不断得到关于未处理异常的这些消息,所以我在网上询问,有人告诉我,我需要使用`catch`'处理'异常.为什么,有问题吗? "* (5认同)
  • 如果Jon Skeet走到我的办公桌前,我会非常紧张! (4认同)
  • @Aaronaught:听起来确实如此 - 但我至少想听听他们对故事的看法. (2认同)

Guf*_*ffa 14

修复您设置的错误,并将异常吞咽块报告为新的,关键的错误.


Ale*_*lli 12

第一个中间目标是很好地了解哪些例外被忽略以及在哪里; 为此,您可以简单地将日志记录代码添加到每个可怕的catch- 所有块中,准确显示它是什么块,以及它捕获和隐藏的内容.对已经过检测的代码运行测试套件,您将获得修复作业的起始"蓝图".

如果你不具备测试套件的话,首先,使一个-单元测试可以等待(检查出羽毛伟大的书与遗留代码一起工作-遗留代码是最肯定你的问题在这里;-),但你需要一套可以自动运行的集成测试,并解决你应该修复的所有错误.

当你去修复bug之后的bug(很多不是由过于宽泛的catch块造成的,只是隐藏 /"推迟"他们;-),一定要以大多数"测试驱动"的方式工作:添加一个单元测试,检查错误,确认它中断,修复错误,重新运行单元测试以确认错误消失.您不断增长的单元测试套件(一切可能被模拟或伪造)将快速运行,您可以在工作时保持廉价重新运行,以便尽快捕获可能的回归,当它们仍然易于修复时.

您分配的任务实际上比"高声望"的SW开发任务(例如原型和新架构)更难(通常更重要),但经常被管理层误解和低估(因此未获奖励!) /客户端; 确保与利益相关者保持一个非常清晰和开放的沟通渠道,指出你正在做的所有大量成功的工作,它是多么具有挑战性,并且(为了他们的缘故,比你自己更多),他们将拥有多少通过在第一时间做到这一点来保存(也许下次他们会...我知道,我天生就是一个狂热的乐观主义者;-).也许他们甚至会为您分配任务的合作伙伴,然后您可以进行代码审查和配对编程,从而极大地提高工作效率.

而且,最后但并非最不重要的,祝你好运! - 不幸的是,你需要它......幸运的是,正如杰斐逊所说,"我工作越努力,我似乎​​就越幸运了";-)


Joh*_*ers 7

更改catch块如下:

catch (Exception ex)
{
    Logger.Log(String.Format(
        System.Globalization.CultureInfo.InvariantCulture,
        "An exception is being eaten and not handled. "+
        "This may be hiding critical errors.\n"+
        "Exception: {0}",
        ex));
}
Run Code Online (Sandbox Code Playgroud)

  • 为此+1.每个Empty Catch块都必须自己进行评估,因为有时候忽略异常可能是合适的,有时你可能会通过尝试删除Pandoras Can of Worms来打开它. (2认同)