打印调试信息的高效宏

来自一位高手的写法

http://blog.ednchina.com/computer00/190798/message.aspx

在程序调试时,我们经常需要输出一些调试信息,当调试完毕后,就不再需要使用了。那怎么快速的在调试状态和发布状态切换呢?通常我们使用预编译加宏定义来处理这个问题,例如:

#ifdef DEBUG
 调试代码
#endif

如果我们使用printf来显示一些调试信息,那么每个地方都加上#ifdef和#endif就很麻烦了。我们可以定义一个DbgPrintf的函 数来专门处理这些事情,只在DbgPrintf函数内放上#ifdef和#endif就行了。但是这样代码在运行时,还是有调用一次函数的,浪费了时间。 那么可不可以利用宏定义,实现完全没有编译代码产生的宏呢?
可以尝试下面的宏代码:

#ifdef DEBUG
#define DbgPrintf printf
#else
#define DbgPrintf /\
/DbgPrintf
#endif

如果DEBUG已经定义了,那么不用说,当然是用printf去代替DbgPrintf了。
下面只分析DEBUG未定义的情形,这个宏定义 实际上是将“DbgPrintf”定义成了“//DbgPrintf”,由于续行符的作用,#define定义时不会发现注释符“//”,但是在展开到代 码之后,就成了注释符“//”了,也就是说,如果你原来的代码是DbgPrintf("%d",x);,经过这个宏展开后成了//DbgPrintf(" %d",x);,相当于自动在前面加了注释符“//”。要注意的是,续行符后面的“/”一定要顶格写,否则就不是“//”了。另外,这个宏只能单独一行使 用,因为它将该行后面的代码都注释掉了。

主要是因为有些编译器它不支持不定长参数宏定义,而printf函数刚好又是一个不定长参数的,所以定义为空宏的办法不好搞,才想出了这个一个把宏变成“//”注释的办法。另外还可以使用
//#define DEBUG
#ifdef DEBUG
#define DBG(CODE) CODE
#else
#define DBG(CODE)
#endif

就是写代码的时候,对于调试信息加上DBG,稍微麻烦点,例如

DBG(printf("%d",x);)

这样就不会出什么问题了,而且还可以在里面写很多行代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Keil中打印调试信息,可以使用以下方法: 1. 在需要打印信息的地方,使用printf函数输出信息到串口。在Keil中,可以使用UART或者虚拟串口来模拟串口输出。通过串口,你可以在终端或者调试器的输出窗口中查看打印信息。 2. 在Keil的Debug选项中,开启窗口实时更新功能。这样,当程序运行时,你可以在调试窗口中实时查看变量的值和程序执行的流程。 3. 使用逻辑分析仪观察变量的值。在Keil中,你可以连接逻辑分析仪,通过观察引脚的状态来查看变量的值。这对于调试硬件相关的问题非常有用。 4. 配置Keil以实时查看外设寄存器的值。通过配置Keil,你可以在调试过程中实时查看外设寄存器的值,这对于调试和分析硬件相关的问题非常有帮助。 总结起来,要在Keil中打印调试信息,可以使用printf函数输出到串口,开启窗口实时更新功能,使用逻辑分析仪观察变量的值,以及配置Keil实时查看外设寄存器的值。这些方法可以帮助你更方便地进行调试和查看程序的执行情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [KILE退出调试模式时显示Encuntered an improper argument](https://blog.csdn.net/weixin_44788542/article/details/115203741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [keil调试](https://blog.csdn.net/qq_36314279/article/details/125116503)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值