当前位置:首页 > 科技  > 软件

避坑:不要在调试版本中的修改程序逻辑

来源: 责编: 时间:2023-10-13 14:37:35 184观看
导读作为一名开发者,我想,你最不希望发生的事情之一是:当你调试一个Bug的时候,Bug就消失了,但直接运行的时候,Bug又出现了。通过 #ifdef DEBUG 技法,可以将额外的调试代码放置到程序中。毕竟,这些调试代码仅会在程序的调试版本中

作为一名开发者,我想,你最不希望发生的事情之一是:当你调试一个Bug的时候,Bug就消失了,但直接运行的时候,Bug又出现了。ie928资讯网——每日最新资讯28at.com

通过 #ifdef DEBUG 技法,可以将额外的调试代码放置到程序中。毕竟,这些调试代码仅会在程序的调试版本中才会生效。但是,一定要注意的是,这些调试代码不应该修改程序的执行逻辑。ie928资讯网——每日最新资讯28at.com

你可以在调试代码中执行参数验证,执行断言,追踪资源的使用,这可能会降低程序的性能并消耗更多的计算资源,这些都是可以接受的,唯一需要注意的一条是:不要在调试代码中修改程序的流程。ie928资讯网——每日最新资讯28at.com

我们来看看下面的例子。ie928资讯网——每日最新资讯28at.com

ie928资讯网——每日最新资讯28at.com

上面的代码是错误的,你是否已经看出来了?
调试版本的行为与发行版本根本不同。如果有人使用 NULL 为 p 参数调用此函数,则程序的发行版本将崩溃,但调试版本将捕获错误并使调用失败。
ie928资讯网——每日最新资讯28at.com

不要在调试版本中修改函数的语义。如果发行版本崩溃,则调试版本也必须以相同的方式崩溃。当然,你可以在崩溃之前记录错误日志信息,但你仍然需要它”崩溃”,和发行版本行为保持一致。ie928资讯网——每日最新资讯28at.com

下面是一个展现了类似问题的 C# 代码的例子。ie928资讯网——每日最新资讯28at.com

ie928资讯网——每日最新资讯28at.com

在上面的例子中,调试版本记录并吞掉了异常,而发行版本直接让异常跳出了此函数。ie928资讯网——每日最新资讯28at.com

如果你恰好也写了这样的代码,发行版本和调试版本的行为方式根本不同,你最终会陷入这种情况:发行版本有一些问题,但调试版本工作正常。ie928资讯网——每日最新资讯28at.com

你的客户无法弄清楚有什么区别,因此他们切换到生产服务器上的调试版本。它的运行速度是原来的两倍,内存消耗的内存是原来的三倍,需要大量的资源才能扩展到以前的服务级别。但这是他们能做的最好的事情,因为问题不会出现在调试版本上(因此无法在那里调试)。ie928资讯网——每日最新资讯28at.com

我看到过关于软件陷入这种困境的报道,这对开发人员的影响非常糟糕。ie928资讯网——每日最新资讯28at.com

总结

今天的论点也是我一直所忽视的:调试的代码,就干调试的活,不要做其他事情,更不要修改程序执行流程。
第二个:调试版本和发行版本可能在执行速度,占用资源存在差异,但两者的行为必须完全一致。ie928资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-13573-0.html避坑:不要在调试版本中的修改程序逻辑

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 数据分析,如何助力运营?

下一篇: SQL和Python,哪个更容易自学?哪个更适合数据工作的编程新手?

标签:
  • 热门焦点
Top