fprintf在代码调试中的重要作用

        做过开发的人基本都知道, 日志对于开发和调试的意义非常重大, 一旦出现异常, 就需要依靠日志中信息来定位bug.  前面, 我们已经比较过单步调试和日志调试, 并详细讨论了彼此的优缺点。 总的来说, 日志调试的地位更加重要。本文我们只讨论日志调试, 且假设某产品打印日志的函数为logPrint.


        logPrint看起来好用, 但是,在实际代码调试中, 我们经常会遇到如下三个稍微有点棘手的问题:

        一.  某系统开机时, 用logPrint打印的那一行早就执行了, 我们来不及执行logcat进行输出, 也就是说, 无法看到开机过程中的日志。

        二.  在某些场景下, 某个文件中, logPrint函数可能会莫名其妙地失效(很可能是该文件就不能用logPrint), 本来走到了对应的分支, 但是没有对应的日志打印, 非常容易误导程序猿的判断。 我也曾经说过, 有了日志的打印, 表明程序一定走到了对应的地方,但是, 没有日志的打印, 则不一定表明程序没有走到这个地方, 因为很可能是打印日志的函数logPrint失效。 我曾经吃过亏啊, 当时纳闷良久, 满头大汗。

        三.  调试日志模块本身的时候, 不能再用logPrint打印了, 否则, 不是循环递归打印么?


        基于上述三个实际场景, 我想出了另一种打印日志的调试方法: 用fprintf把日志写到文件中。 我已经多次用过这种方法, 屡试不爽, 非常奏效。 如果大家以后遇到类似上面三点的问题, 可以考虑用fprintf把日志写到文件。

       值得注意的是, 我说写到文件, 主要是为了调试, 而不是说, 代码中所有的logPrint地地方都应该换成fprintf. 


       最后, 我来附上fprintf使用的一段小代码:

#include <stdio.h>

int main()
{
	{
		FILE *fp = fopen("myLog.txt", "a"); // 为了简便起见, 下面不检查fp
		fprintf(fp, "taoge:%s\n", "hello world");
		fclose(fp);
	}

	return 0;
}



    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值