您的位置:首页 > 运维架构 > Linux

LINUX调试技巧一则

2007-08-10 05:05 232 查看
最近在开发LINUX下的工具,调试一个BUG时遇到很郁闷的情况:

某处有个segmentation fault。懒得用gdb,于是随便加了几条调试信息,编译,运行之。直接显示错误信息。

唔......BUG在最近一条信息之前,再细分,再加调试信息,编译,运行,嗯,还得再分。

......

3次之后偶郁闷鸟,真正的郁闷鸟......

两条消息,一条能正常显示,紧接着的,中间没有任何语句--也不是多线程--的第二条信息就是显示不出来!我靠!我招惹谁了啊?没有任何干扰啊

好吧,劳资怒了,上GDB!

一调之下更郁闷了,明显两条语句都正常调用了啊。没有错啊?!

再仔细看,唔.....虽然正常调用了printf,可是怎么没显示?

查代码,总算查出原因了。

第二条语句的显示信息上没有加回车!

总算知道原因了:LINUX的printf()函数不会立即把字符串输出到设备,而是先存到一个缓冲区中,等缓冲区被填满到一定程度之后才会输出到设备,因此如果在缓冲区被填满前程序结束运行,那么恭喜你,上一个回车之后显示的内容就华丽地丢失了。

SO,这提高性能的做法,在调试状态就成为造成混乱的根源。在使用printf()输出调试信息时一定要加上回车。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: