makefile编译debug版本调试时无法定位到源文件:No source available for “main() at 0x8544“

问题

之前用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不要同时出现。

猜你喜欢

转载自blog.csdn.net/Edwinwzy/article/details/130968590