debugging - 分级调试和错误处理的良好实践

标签 debugging error-handling coding-style

为了调试我的代码(低级问题),我想使用不同级别的调试,以改变我的代码拒绝某些东西的难易程度。到目前为止,我一直在使用这样的东西:

enum error_level
{
    el_neglegable = 0,
    el_notable_to_log = 10,
    el_notable_to_print = 100,
    el_terminate_program = 1000,
    /* you can fragment the levels even more, of course */
};

void inline process_error( error_level error )
{
    if( error >= el_notable_to_print ) printf("A notable error has occured!\n");
    if( error >= el_terminate_program ) exit();
    /* you can build in more queries like this, of course */
}

这只是主题的变体,但是现在您对我的意思有了了解。我想学习更好的实践,以使用不同级别的调试,具体取决于我要从程序中删除错误的程度。

问题:您是否了解良好的准则,惯例等,以便获得更可维护的代码并允许使用这种调试模型?

最佳答案

能够描述错误情况绝对有其值(value),但是通过严重性或采取的措施来描述错误情况意味着决策是由错误的代码段做出的。

我这样说的原因是遇到错误的方法缺少上下文。

考虑套接字连接打开失败的情况。您希望socket.open(host,port)返回什么错误严重性?根据上下文,您可能会:

  • 静默重试
  • 登录并重试
  • 向用户
  • 抛出对话框
  • 尝试列表
  • 中的另一个连接
  • 终止程序

  • 对错误采取何种操作的决定完全取决于上下文,即特定错误发生时的含义。

    因此,大多数人都遵循一种模型,其中遇到错误的方法会报告该错误,并允许调用者确定要采取的措施。

    因此,您不必考虑严重性级别,而是拥有一组错误条件,并且调用方可以采取措施或返回错误本身(不一定是同一错误)。

    在这种情况下,socket.open(host,port)将产生类似于socket_open_fails的错误,并且调用方将具有上下文来知道该套接字打开失败时该怎么做。它会知道套接字是用来获取重要数据的,如果没有该套接字,程序将无法继续运行,或者是可选的(可能是获取程序更新)。

    因此:不要通过要采取的措施来定义错误条件:通过失败的原因来定义它们。

    附带说明一下,我花了很多时间写了这篇文章,而没有描述异常(exception)情况。

    关于debugging - 分级调试和错误处理的良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5715077/

    相关文章:

    c - 使用 gdb 检查调用者帧

    ruby-on-rails - 收集抛出的RoutingError消息

    php - Apache 服务器日志错误。 AH00126 : Invalid URI in request GET, 等

    php - 未捕获 PDO 异常

    java - Checkstyle 5.5 是否验证泛型

    java - 内部表示的数组与私有(private)类 : Java Ethics

    html - Internet Explorer 表单输入问题

    android - 如何在 Android Studio 中调试 PhoneGap JavaScript 代码

    c++ - 在局部变量上使用 const

    debugging - 调试器如何知道源代码中的行号?