说的都没错,但听起来怪怪的
今天晚上想把代码在服务器上走一下形式,编译运行一下,通过了就收拾收拾回宿舍了。
结果编译没有问题,运行的时候突然报了“段错误 (core dumped)”,当时就尿了,呵呵,学长学姐的“legacy”。
代码需要在windows和linux上跨平台运行,为了避免使用ftp工具(一开始一直使用psftp, 虽然命令行看起来有点炫酷但实在是太不方便了,后来找到了一个FileZilla, 挺好用的,但也挺麻烦),就开始用git。这几天还和范老师猛烈的研究git怎么用,幸好有林大神。
所以代码都是在Windows上写的,用Visual Studio。Visual Studio 我装了两个版本,2008 和 2013 Express。因为实验室里之前的组件都是用2008编译的,所以依赖那些的组件在2013上编译通不过,也就没法调试。但2008写代码实在是太难看了,尤其是配合上Visual Assist,简直难看,学长又拒绝使用2013重新编译原来的组件,所以机智的鹏宝会有一个build目录和一个build_2013目录,cmake两次,一次用2008的,一次用2013的,用2013的看代码写代码写注释,用2008的编译调试,诶,疲劳。
怎么说那去了。
总之发现了错误我很慌张,因为在windows上是没有问题的(诶,以后被测试的抓到可能说的最多的一句话了),所以也就没法在VS里调试,项目又很大,用gdb一点一点调试肯定会很难过。所以就去网上找,然后发现可以利用出错之后的core文件使用gdb找到出问题的地方。
然后就用 -DCMAKE_BUILD_TYPE=Debug 给生成的可执行文件添加了调试信息(这也解决了我之前的一个问题,我之前问范老师,为啥windows上的大家都提供一个release的lib,一个debug的lib,但linux上的只有release的呢?范老师说,linux上可能只有release吧。嘻嘻嘻嘻嘻,才不是...)
然后调整了core文件的大小限制,生成了core文件,最后用gdb找到了出问题的位置,卧槽这的代码我还没开始看呢... 烦死了。
值得庆幸的是,鹏宝机智的发现,原来是输入的文件的格式不对,程序没有问题,但其实这也算有问题,鲁棒性不强... robustness哈哈,这个单词好有意思...
所以问题就解决了...