2011-04-19 80 views
0

为了调试我的代码(低级问题)我想使用不同级别的调试,以便改变我的代码可能拒绝某些事情的难度。到目前为止,我一直在使用像这样的东西:平稳调试和错误处理的良好实践

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 */ 
} 

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

问题:知道你很好的指导,规范之类的,为了实现代码,更容易维护,并允许这样的调试模式?

+1

这不是例外情况吗? – CPerkins 2011-04-19 12:30:38

+0

你可以修改所有的代码,但这与这个问题完全没有关系。为了避免歧义,我要明确陈述。这不是一个C++问题。 – shuhalo 2011-04-20 00:28:36

+0

所以你真的在问,根据错误的严重程度来表征错误类型是否是一个好主意?好的,我可以说。 – CPerkins 2011-04-21 13:07:29

回答

1

有绝对能够表征错误条件,但严重程度或采取的措施表征它们值意味着决定是由错误的代码做。

我这么说的原因是,它遇到错误的方法缺乏上下文。

考虑套接字连接打开失败的情况。你想要socket.open(主机,端口)返回什么样的错误严重性?根据上下文,您可能:

  • 静默重试
  • 登录,然后重试
  • 抛出一个对话框由用户
  • 尝试在列表
  • 另一个连接终止程序

的该采取什么行动上的错误的决定是完全依赖在上下文中 - 发生特定错误时的含义。

出于这个原因,大多数人现在正根据这其中遇到错误的方法报告错误,并允许主叫方决定采取何种行动的典范。

因此,而不是想着严重性级别,而不是你有一组错误状态和来电要么采取行动,或者返回一个错误本身(不一定是相同的错误)。

在这种情况下,socket.open(host,port)会产生这样的错误socket_open_fails,和来电将有上下文来知道什么时候该套接字打开失败该怎么办。它会知道套接字是否用于获取重要数据,否则程序无法继续,或者更可选(可能获取程序更新)。

因此:不要动作定义的错误情况采取:由什么失败的定义。


作为一个便笺,我花时间写这篇文章的时间很长,在描述这一切时都没有提到异常。

+0

额外的投票不依赖于例外的概念。并为你的洞察力的答案! – shuhalo 2011-06-06 22:46:50