Debugging 分级调试和错误处理的良好实践
对于调试我的代码(低级问题),我希望使用不同级别的调试,以改变我的代码拒绝某些东西的难度。到目前为止,我一直在使用这样的东西:Debugging 分级调试和错误处理的良好实践,debugging,error-handling,coding-style,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 cou
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 */
}
这只是主题的一个变体,但现在你已经了解了我的意思。我想了解使用不同级别调试的更好实践,这取决于我希望从程序中删除错误的程度
问题:为了实现更易于维护的代码并允许这种调试模型,您是否知道良好的指导原则、实践等?能够描述错误条件绝对有价值,但以严重性或采取的行动来描述它们意味着决策是由错误的代码段做出的 我这样说的原因是遇到错误的方法缺少上下文 考虑套接字连接打开失败的情况。您希望socket.open(主机、端口)返回何种错误严重性?根据上下文,您可能会:
- 静默重试
- 记录并重试
- 向用户抛出一个对话框
- 尝试列表中的其他连接
- 终止程序
- 等
socket.open(host,port)
将产生类似于socket\u open\u fails
的错误,调用方将有上下文知道当socket open失败时该做什么。它将知道套接字是否用于获取重要数据,如果没有这些数据,程序将无法继续,或者是更可选的(可能用于获取程序更新)
所以:不要用要采取的行动来定义错误条件:用失败的东西来定义它们
作为旁注,我花了很多时间来写这篇文章,在描述这一切时没有提到例外 这不是异常的用途吗?您可以重新表述异常中的所有代码,但这与问题完全无关。为了避免含糊不清,我将把这句话说清楚。这不是一个C++问题。所以你真的在问,根据错误的严重程度来描述错误条件的类型是否是个好主意?好的,我可以这么说。额外投票支持不依赖例外的概念。感谢你富有洞察力的回答!