最近在Linux环境下交叉编译一个挺庞大的工程软件,目标机器是mips开发板。因为程序原来是在arm板上运行的,都已固定成产品,所以对其功能绝对的信任。但是编译完之后运行,却发现程序运行很不稳定。
首先是频繁发生段错误,你懂得,linux下发生段错误要用gdb调试,于是编译工具链,生成gdbserver之类。 调试发现了这不是一个段错误,而是整个工程上到处面临着段错误的危险。于是开始怀疑代码的安全性,后来老大指导了下,说是板子性能不好,导致程序慢板拍,本来15秒的延时是不够的,于是乎在工程的某一地方加了300秒的延时。OK,段错误没有了。
其次是内存泄露,这么庞大的工程(100多个文件)出现内存泄露的问题还是挺可怕的,在linux下使用valgrind工具还方便些,于是官网上下载了打包的版本,但是却不能交叉编译mips系统,后来只能从官方的svn上down下来一份最新代码,才可以交叉编译。但是在开发板上运行 又出来一堆问题,提示路径之类的错误,真无语了。。
后来同事拿了一个arm的板子,我登上去看了下,发现竟然还有个daemon进程。OMG!原来以前他们就已经承认这个软件有段错误的。。。而且允许出现段错误,甚至鼓励出现段错误,因为段错误后,才会解决内存泄露的隐患。
OMG!守护进程还有这个功能:当程序过于庞大,而且不容易找到隐藏的问题时,可以放弃解决并允许程序出现段错误退出,守护进程帮你搞定一切段错误、内存泄露等一系列的技术难题。。。
不知道这是高兴还是尴尬..