最近飞机出了不好的事,我表示深深地哀悼。实时监控系统出了问题, 大家都在急忙找黑匣子这个black box, 因为black box中有飞机飞行的一些记录。
下面,我从软件开发的角度来探讨一下log(black box)和debugger的应用场景。
最开始学C语言的时候,经常用printf函数来打印变量的值。后来学会了单步调试,便了此不疲, 彻底爱上了debugger单步调试。再后来, 做与嵌入式相关的开发,又慢慢钟情于log. 下面简要聊聊log和debugger的应用场景,随便聊,随便扯,以便抛砖引玉。
1. debugger单步调试是微观的(VC++6.0的单步调试很直观啊),可以查到几乎每一个变量的状态;
log则相对宏观,有一气呵成的感觉,但很少有log去打印每一个变量的状态, 不够细致入微。
2. 如果怀疑bug出现在某个地方, 可以用debugger单步调试;
很多时候,此处很可能没有log, 为了定位bug, 又需要重新添加日志代码,重新编译等, 说不定要需要烧录呢,比较麻烦。
3. 有时候程序太大, 我只想看程序跑起来后前面的一些变量的值, 这个时候用debugger的单步调试就很好了。
如果用log, 可能需要运行全部程序。
4. 如果对bug出现的地方没有什么概念,你怎么用debugger单步调试呢?
此时,用log的优点就很突出了。
5. 在大型系统中,很多问题都是概率性出现的,你怎么能用debugger来调试呢?
此时, 用log的优点就很突出了。
6. 你把软件发布给用户了,远方的用户用着用着出了问题, 你还怎么用debugger单步调试?
此时, 用log的优点就很突出了。
7. 程序中如果有定时器或多线程, 你用debugger调试,很可能影响程序的结果。
此时,用log, 程序跑起来更流畅,更真实。
8. 如果一个循环有1000次,你需要看哪一次出了问题,用debugger? 累死你!
此时, 用log吧, 我有过亲身经历。
9. 有时候要进行一些自动测试,你怎么用debugger?
此时, 用log吧。
10.总体来讲, log的应用比debug要广。
最后要说的是, 没有什么好坏,只有合适不合适。估计,在学生时代,用单步调试用得多,在公司,用日志用得多。
你看,地面需要对飞机进行实时监控,但有时候,实时监控室不靠谱的,比如驾驶人员把飞机飞到雷达监测不到的地方呢? 这个时候, 单步跟踪失效。所以,需要黑匣子来记录log.