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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

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

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

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

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

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

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
Top