千家信息网

软件调试:利用断言ASSERT宏定位软件bug

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,/* *Author : DavidLin *Date : 2014-12-26pm *Email : linpeng1577@163.
千家信息网最后更新 2025年01月24日软件调试:利用断言ASSERT宏定位软件bug
/*     *Author  : DavidLin            *Date    : 2014-12-26pm            *Email   : linpeng1577@163.com or linpeng1577@gmail.com            *world   : the city of SZ, in China            *Ver     : 000.000.001            *For     : threads for rxtx!         *history :     editor      time            do            *          1)LinPeng       2014-12-26      created this file!            *          2)            */ /* assert_self.h */#ifndef  __ASSERT_SELF_H__#define  __ASSERT_SELF_H__#include#define    ASSERT_ENABLE    (1)#define    xprintf    printf  /* xprintf can be tty print or uart print, etc */#if  ASSERT_ENABLE#define assert_error()  \    do \    {  \       xprintf("[ERROR] Assert FILE: %s: LINE %d\n", __FILE__, __LINE__);  \     }while(0)#define    ASSERT1(para)  \    do \    {  \       if(!para)  \       {  \          assert_error();  \       }  \    }while(0)  \#else  /* if ! ASSERT_ENABLE */ #define    ASSERT1(para)  \    do \    {  \       if(para)  \       {  \       }  \    }while(0)   #endif  /* end of ASSERT_ENABLE */#endif  /* end of __ASSERT_SELF_H__*/

测试用例

/* test case : test.c */#include#include"assert_self.h"  int main(int argc, char* argv[]){    switch(argc)    {        case 2:            ASSERT1(atoi(argv[1]));            break;        default:            printf("ARG ACCEPT 1\n");            break;    }    exit(0);}

软件Bug定位,很多时候,比如利用Assert宏,可以把48小时的调试大餐压缩成1口可以吃掉的饭后甜点,每个软件小组都在重新演化,过去的经验总是得不到很好的传承,这就是我们!


0