代码之家  ›  专栏  ›  技术社区  ›  Matthew Vines

我应该使用.NET中的调试类吗?

  •  2
  • Matthew Vines  · 技术社区  · 15 年前

    我读了很多关于 Debug class 最近。

    我个人对这件事很不满意。我可以看到它改善了创建真正棘手算法的过程。但它也为我的应用程序添加了很多代码,我不得不不必要地涉过这些代码。拥有一个调试程序应该消除对锅炉板代码的需求,不管它是否被自动剥离出来进行发布构建,对吗?

    我还感兴趣的是,你们中那些将调试类充分利用的人是如何做到这一点的。编写debug.assert语句,还是 agree with Ed Kaim 应该只使用debug.writeline和debug.fail。

    8 回复  |  直到 15 年前
        1
  •  3
  •   Reed Copsey    15 年前

    我个人同意Ed Kaim的观点。就我个人而言,我觉得好的测试实践已经取代了调试。断言我所有工作中的调用。另外,我已经放弃了调试的使用,也失败了——每当我想使用这个的时候,我都会发现我想在发布和调试中抛出一个异常,所以我通常不明白这一点。

    尽管如此,我仍然使用一些调试打印语句来增强我的调试(通过debug.writeline),特别是在数字代码中…我承认这是对老式printf调试的回归,但通常这仍然是跟踪问题的最快方法,尤其是在调试器中没有出现的问题(由于时间问题、线程等)。

        2
  •  2
  •   Tim Cooper    13 年前

    就个人而言,我很少在任何编程中使用调试类。我读了很多评论和建议,比如约翰·罗宾斯(约翰·罗宾斯)的评论和建议。 Debugging .NET 2.0 Applications 以及 Bugslayer 列)关于您应该主动断言的原因-尤其是方法的参数。

    我的问题是,假设我要写这样的代码:

    Public Sub Test(source As Object)
    
      Debug.Assert(source IsNot Nothing, "source is Nothing")
    
      ' Do something....
    End Sub
    

    这在调试构建的开发过程中很好地工作,但我最终还是要这样做:

    Public Sub Test(source As Object)
    
      If source IsNot Nothing Then
    
      ' Do something....
    
      End If
    End Sub
    

    如果“源”有可能什么都不是,那么我还是要做一个“如果”检查。我不会将断言调用留在发布版本中。

    我不使用调试类的另一个原因是我编写了很多单元测试。这样做让我覆盖了很多代码路径,因此不需要在代码中进行debug.assert。

    至于调试日志记录,那么我只使用跟踪调用和系统内部构件 DebugView 或记录跟踪调用输出的文本文件。

    我很想听听其他人关于这个主题的看法,因为我也有兴趣知道他们在开发期间如何使用调试类。这是一个我经验不足的领域,所以我很想学习。

        3
  •  1
  •   Richie Cotton Joris Meys    15 年前

    与在调试器中简单运行代码相比,使用调试类的主要优势在于,您可以获得一个日志文件(使用debug.writeline语句),您可以与同事/存储共享该文件以获取记录。

    Debug.Assert相对于编写单独的测试方法具有的优点是紧凑性,并且检查的位置正好是它需要的位置,而不是单独的方法。

        4
  •  1
  •   Greg    15 年前

    我个人的观点是,debug.assert和debug.fail经常被错误地用于“隐藏”最终用户的错误。如果有必要,我宁愿写错误日志或者抛出异常。

        5
  •  1
  •   Rob Elliott    15 年前

    我不能告诉你是否应该,但我可以建议我使用它的时间。

    当我需要关于函数/变量/进程/结果的更多信息时,我使用debug,但一旦它被发布,我就知道该信息不再相关。我使用debug.writeline来验证进程的正确时间顺序,例如debug.assert来验证值应该是什么。

    我认为Kaim只是说很容易误用debug.assert。不要使用debug.assert来捕获生产中可能发生的问题。assert用于开发期间的简单检查,如提醒标志。它不是用来处理发布代码错误的。您可以放置一个debug.assert每隔一行,而不用担心它会减慢发布代码的速度。

        6
  •  1
  •   Paul Sonier    15 年前

    我建议不要使用 Debug 类;我没有。一般来说,我发现对于开发来说,调试器已经足够满足我的所有需求;我真正需要跟踪的是,我记录下来。关于日志记录,最关键的部分是 也出现在生产代码中 这是非常重要的。 调试 根据定义,它只在调试代码中起作用;虽然它可能对帮助您在开发过程中找到某些东西很有用,但如果发现这一点很重要,请将其记录下来。说真的。如果您需要一个特殊的工具来找到它,并且足够复杂,那么就记录它;它很可能作为一个边缘案例出现在您的生产环境中,那么您会怎么做呢?

    对于它的价值,我发现log4net在日志记录方面非常有用和强大。我建议使用它而不是 调试 任何一天上课。

        7
  •  0
  •   Madeleine    15 年前

    我们经常使用debug.assert,因为您所做的每一个重要假设都不会损害拥有assert。

    相当有用但很古老的文章-Idesign C编码标准 here

        8
  •  0
  •   pero    15 年前

    调试。断言合同测试。它有一点好处,就是它不存在于发布代码中。这不是if+引发异常的情况。

    我使用debug.writeline来处理UI事件,因为有调试程序阻碍(例如,在从vs窗口切换到app窗口时,会再次调用刷新事件)。