联系我们大型铝电解电容小微型铝电解电容贴片铝电解电容器聚合物铝电解电容器

品质诚信服务

当前位置:首页 >> 产品和行业资讯 >> 使C语言调试更高级

使C语言调试更高级

通常,在编写项目时,为了更直观地进行调试,我们将在程序中打印printf调试语句。

随着项目的编写越来越多,printf也将越来越多,但是当项目准备结束时,它就从此时开始。

优化将发现您想要完全删除所有printf语句,并且您担心在那里将在以后的项目中出现问题,您将不会发现问题。

如果不删除项目,将会有很多调试语句干扰观察,并且会减慢系统速度并影响效率,这在微控制器上就不足为奇了,还有另一种情况,有时消息相同将会打印出来,因此不清楚要打印哪个功能,因此需要很长时间才能发现问题,因此我们需要一个更具艺术感的调试程序包。

#define __DEBUG_VERSION#ifdef __DEBUG_VERSION #define DEBUG(format,...)printf(“ [文件:%s,Line:%d]'format,__FILE__,__LINE__,## __ VA_ARGS __)#else #define DEBUG(format ,。

..)#endif与上面的代码一样,当定义__DEBUG_VERSION时,DEBUG函数将执行printf(“ [[File:%s,Line:%d]” format,__FILE__,__LINE__,## __ VA_ARGS__)如果未定义,则不执行任何操作。

我们可以在第一篇文章中对该例程进行实验:#include& lt; stdio.h& gt; #include“ iniparser.h” #define CONFIG_NAME“ Config.ini” #define __DEBUG_VERSION#ifdef __DEBUG_VERSION #define DEBUG(格式...)printf(“ [文件:%s,行:%d]”格式,__FILE__,__LINE__,## __ VA_ARGS __)#else #define DEBUG(format,...)#endifvoid Create_Default_InI_File(void ){FILE * Default_ini = NULL; Default_ini = fopen(CONFIG_NAME,“ w”); fprintf(Default_ini," [设置] " INIT_FLAG = 0; " VOLUME = 1; " LANGUAGE = 1; ”); fclose(Default_ini);} int main(void){int Init_flag; int Volume_flag; int English_flag; / * 1,创建一个默认的Config.ini文件* / Create_Default_InI_File(); / * 2,分析Config.ini文件获取参数* /字典* Config_ini = NULL; / * 3,加载Config.ini文件* / Config_ini = iniparser_load(CONFIG_NAME); if(NULL == Config_ini){printf(“无法解析%s文件 ",CONFIG_NAME);返回-1;} / * 4。

将字典转储到打开的文件指针。

* / iniparser_dump(Config_ini,stderr); / * 5。

获取在上面创建的InI文件中的几项信息* / Init_flag = iniparser_getint(Config_ini,“ Setting:INIT_FLAG”,-1); Volume_flag = iniparser_getint(Config_ini,“ Setting:VOLUME”,-1); English_flag = iniparser_getint(Config_ini,“ Setting:LANGUAGE”,-1); DEBUG(“ Init_flag:%d ",Init_flag); DEBUG(“ Volume_flag:%d ",Volume_flag); DEBUG(" English_flag:%d ",English_flag); / * 5。

更改INIT_FLAG项的值* / iniparser_set(Config_ini,“ Setting:INIT_FLAG”,“ 1”); Init_flag = iniparser_getint(Config_ini,“ Setting:INIT_FLAG”,-1); Volume_flag = iniparser_getint(Config_ini,“ Setting:VOLUME”,-1); English_flag = iniparser_getint(Config_ini,“ Setting:LANGUAGE”,-1); DEBUG(“ Init_flag:%d ",Init_flag); DEBUG(“ Volume_flag:%d ",Volume_flag); DEBUG(" English_flag:%d ",English_flag); / * 6。

释放字典* / iniparser_freedict(Config_ini); return 0;}运行结果:打印时,调试器会告诉您在哪一行上键入哪个文件,方便吗?但这只会导致不执行所有操作或全部执行。

如果您想变得更强大,那么我们可以通过组合C语言宏定义的功能来优化此功能,并将其留给读者尝试。