从测试角度写代码(一)调试分级

本文探讨了调试分级在大型项目开发中的应用,介绍了ERROR、WARNING、DEBUG和INFO四个级别的概念及其实现方法,通过宏定义区分不同级别的调试信息,提高了代码测试的精准性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从测试角度写代码(一)调试分级

一.为什么要使用调试分级

调试分级并不是一定要做的,需要根据具体情况进行分析,比如我们在使用开发小型代码时,是完全不需要使用调试分级的,反而会给我们带来了代码编写的复杂性。调试分级一般用于大型项目开发中,可以快速定位代码问题,提高编程效率,以下场景都是可以使用调试分级进行优化的选项。

  • 当我们进行大型项目开发时基本都是按阶段性开发进行的,当我们调试完一阶段代码之后,如果需要继续调试开发下一段代码时,需要将上一段代码的打印信息全部屏蔽。
  • 上一个场景尽管有同学说我们可以开发下一阶段任务前,利用编译器的查找替换将上阶段的代码的printf全部替换//printf进行快速注释,但是如果我们需要输出的代码既有需要显示的业务代码,又有需要开发时的调试方法。直接使用替换功能将调试信息注释掉同时也会将显示信息注释。
  • 在项目发布上线的头天,进行最后的代码测试时,如果调试打印出现了错误信息,但是这个信息并不紧急,为了不影响发布日期,我们完全如期上线项目,在后期使用补丁或者更新的方法进行代码修饰。但如果没有代码分级的情况下,在大型项目中测试打印出非常多信息的情况下,如何快速得到错误严不严重呢。

二.调试分级层次

  • 以上问题都可以通过手动修改printf进行改变,但是这种方法在使用时,即繁琐又低效,而且一步步修改也容易出错,自己写一个小的demo代码还好,具体代码实施时,还是使用分级调试的思想比较快捷。

  • 我认为调试分级参照日志的做法,大致的分为以下四个级别:

    • ERROR级别:这种级别优先级最高,表示运行功能的过程中表示代码已经发生了错误,比如文件读写出错,内存访问出错,需要进行修正。这种问题需要立即解决。
    • WARNING级别:这种级别优先级其次,表示代码能够正常运行,但是可能存在潜在问题,这种问题在也需要进行解决,但是如果项目紧急,完全可以先根据警告信息进行一个判断。当错误信息不会影响到整个项目的功能运行,我们先将产品发布,后期通过更新和补丁进行修复。比如现在很多手机厂商在发布会上需要发布新的操作系统,尽管系统中还存在一些小的DEBUG,但是就目前而言,这些小bug基本不会影响到用户体验,这时我们为了保证如期发布,可以使用先上线,后修复的策略。
    • DEBUG级别:这种级别属于程序调试级别,在程序开发时,提供一个调试级别给程序员们做一个信息调试,获取出程序员员所需要的调试信息。在项目发布后,需要屏蔽掉这一级别显示信息。
    • INFO级别:这种级别属于正常输出级别,系统通过正常的打印出业务信息与用户进行交互,我们需要展显出来的菜单信息就是这一层。
  • 实现调试分级的方法

    • 利用不同的宏定义不同的调试等级,下面代码定义出了两种级别,一个正常的信息交互info_log,一个用于调试debug_log。我们调试代码可以使用debug_log代替printf,正常的交互信息可以用info_log代替printf。具体实现代码如下:

      #define DEBUG_PRINT 1
      
      #if(1 == DEBUG_PRINT)
      #define debug_log printf
      #else
      #define debug_log
      #endif
      
      #define INFO_PRINT 1
      
      #if(1 == INFO_PRINT)
      #define info_log printf
      #else
      #define info_log
      #endif
      
      #include <stdio.h>
      #include <stdlib.h>
      
      int main(void)
      {
      	char *info_messages = NULL;
      
      	info_log("you scanf messages is %s\n", info_messages);
      
      	while(1)
      	{
      		info_messages = (char*)malloc(sizeof(int)*10000);
      		if(NULL == info_messages)
      		{
      			debug_log("no enough memory\n");
      			break;
      		}
      
      	}
      	return 0;
      }
      
    • 程序输出

      • 将info_log的宏置为1,debug_log的宏置为0,只显示正常交互信息

        在这里插入图片描述

      • 将info_log的宏置为0,debug_log的宏置为1,只显示调试信息

        在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值