关于Linux 驱动以及应用调试信息打印方式总结

1.应用打印调试

1.1 printf

       printf 是最简单的应用调试打印方式,默认打印在调试串口上,如果有telnet ssh 这些伪终端运行程序,printf 就打印在当前终端上。printf 的好处就是简单易用,因为我们第一个c应用程序就用了printf了。囧,我当时Helloworld 没好好学习导致后面很窘迫。不过printf 也带有较大的缺陷,那就是比较耗时,如果printf 在应用程序使用过多,会导致应用程序运行很慢。非常影响效率,甚至会导致一些bug 没那么容易复现等等,怎么办?其实还有很多办法能解决这些问题的,后看后面的logcat ,syslog以及把应用重定向到ttyprintk方式就解决了这个占用时间的问题。

1.2 logcat

       logcat 是Android 系统上用的,本来可以在Android HAL,JNI ,framework 的c ,c++,Java 打印log ,后面我们自然可以移植到其他Linux版本的c 应用里面打印应用信息了。logcat 是有个缓存驱动的,写的很精妙,网上有不少分析文章,之所以不占用资源是因为支持poll 等各种阻塞,非常好用。缺点就是需要移植了,并且我们其他应用程序这么多printf,怎么一下子切换到logcat 上打印输出?哦,其实也可以把Android 下的logwrapper移植过来重定向一下。似乎logcat 就是替代printf的完美方案了。不过真的就是这样吗?Linux 下以前就没人研究过更简单,更好的办法,无意间发现syslog 也是很NB的。

1.3 syslog

       syslog和printf一样都是glibc 库函数,纯应用实现的,不过syslog和printf 实现起来完全不同,syslog 是通过AF_UNIX socket IPC 通信方式打印出日志,在syslogd 服务端再读出来显示在终端的,所以syslog 打印了日志后,不能在终端马上能看见,只能调用syslogd函数才能显示出来,这点和logcat 使用方式是类似的。

2. 总结

            printf适用于简单的应用场合,如果在大型程序,建议多用syslog或者logcat,不会影响程序性能。由于时间有限,就不讲具体logcat移植,syslog 等使用方法了,等有空我再后面贴一下别人写的文章链接吧。下一篇再来讲讲Linux驱动调试信息的打印方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值