我在OSX上调试Eclipse ( Helios的最新RC,从内部使用最新的CDT更新)中的C++程序时遇到了问题。
这个程序非常简单(特别是从NeHe的OpenGL教程中学到的第二课),由一个cpp文件组成,使用OpenGL和Cocoa框架,并与libSDL.a和libSDLmain.a链接。
该项目的结构非常简单:源文件位于项目的子目录src/中,可执行文件构建到项目的根目录中。
问题是,每当我尝试添加断点并对其进行调试时,断点似乎完全命中,但没有显示源代码-相反,我只是在代码窗口中得到一个"No source available for main()“错误。
编译器标志将优化设置为none,并且编译器和链接器都设置了调试符号标志(-g)。
Eclipse中的调试设置被设置为“标准生成进度”,调试器被设置为"gdb“。
现在最奇怪的事情是,如果我尝试调试完全相同的可执行文件-即。与Eclipse构建的完全相同--从终端(shell)使用gdb,然后一切工作正常。命中断点,显示源代码,没有任何问题。
我已经确保Eclipse和shell使用相同的gdb可执行文件(即/usr/bin/gdb)。
现在我可能错了,但这一切都表明编译器和链接器标志不可能有问题(因为可以从shell调试相同的可执行文件),所以问题可能出在如何从Eclipse中调用gdb?也许当从Eclipse运行时,gdb会选择与从shell运行时不同的配置文件或其他文件?(有人知道吗?)
我真的很感谢任何人的帮助,因为它正在慢慢地让我发疯!
如果还有其他有用的细节,请告诉我-- Eclipse/cdt/gdb的确切版本号,确切的链接器/编译器命令行,等等--我将很乐意用它们更新这篇文章。
在此之前,非常感谢,
思考。
-编辑@ "14小时前“
我尝试了“添加文件系统路径”(使用“搜索子文件夹”)选项,但不起作用。我还尝试创建一个新的完全扁平的项目,但也不起作用。我甚至尝试过获取Galileo发行版(eclipse-SDK-3.5.2RC4 with CDT update),但这并没有什么不同(除了gdb启动较慢之外)。
还有一些我注意到的奇怪之处:一旦我收到"No source available“消息,如果我切换Eclipse的控制台以显示"gdb”控制台,并打开"Verbose console mode“以便与之通信,那么我就可以发出"l”和"bt“命令并使它们成功工作,从而显示出我的断点所在的正确的源代码和堆栈。如果我错了,请纠正我,这一定意味着信息已经存在,gdb正在被正确调用-那么为什么Eclipse看不到这些信息呢?
老实说,我快要放弃Eclipse了……我也是抱着很高的期望来到这里的。
任何额外的帮助或想法都将不胜感激。
t.
发布于 2017-10-31 19:46:25
值得一提的是,在使用cmake构建项目的情况下,解决方案的一种方法是在cmake命令中添加"debug flag“,即-
$ cmake /path/to/main/cmake_file -DCMAKE_BUILD_TYPE=Debug
https://stackoverflow.com/questions/2324602
复制相似问题