问题
之前用makefile编译了一个release版本的可执行文件,但是后面想调试的时候发现无法调试。
觉得-g
就能解决问题,后面发现根本不行。
这里虽然加了-g
选项,但是调试的时候还是出现找不到源文件的情况。
解决方案
对已有的C/C++工程用makefile编译的release版本,在不改变源码的情况下怎么转换成debug版本。
这个问题仔细研究了一下makefile之后,才意识到makefile的规则是根据时间戳来的。
也就是说,源码不改变的情况下,原来release版本生成的.o
中间文件,就算后面makefile加了-g
选项,可以调试,但也是无法进入到源代码中去。因为源文件没改变,那么.o
中间文件就不会重新生成,那么对应的-g
选项其实就没有添加进去。
最终操作:
一方面:在makefile里面添加编译选项-g
另一方面:要把原来编译的release版本生成的中间文件.o
全部删掉,这一点非常重要。
还有就是之前看书提到的:-g
选项和代码优化选项-O/O1/O2/O3
不要同时出现。