"在使用gdb在Eclipse中调试简单C++时,没有可用于main()的源代码"错误

tho*_*ton 20 c++ eclipse debugging macos gdb

我在OSX上调试Eclipse中的C++程序(Helios的最新RC,用自己内部更新的最新CDT)时遇到了麻烦.

该程序非常简单(基本上是NeHe的OpenGL教程的第2课),由一个cpp文件组成,使用OpenGL和Cocoa框架,并与libSDL.a和libSDLmain.a链接.

项目的结构非常简单:源文件位于项目的子目录中,名为src /,可执行文件构建在项目的根目录中.

问题在于,每当我尝试添加断点并对其进行调试时,断点似乎都会被完美地命中,但是没有显示任何源 - 相反,我只是在代码窗口中得到"没有源可用于main()"错误.

编译器标志的优化设置为none,编译器和链接器都设置了调试符号标志(-g).

Eclipse中的调试设置设置为"Standard spawn progess",调试器设置为"gdb".

现在最奇怪的是,如果我尝试调试完全相同的可执行文件 - 即.与Eclipse构建的完全相同 - 使用终端(shell)中的gdb然后一切正常.断点被击中,源代码显示,完全没有问题.

我确保Eclipse和shell都使用相同的gdb可执行文件,它们是(它是/ usr/bin/gdb).

现在我可能错了,但这一切都告诉我,编译器和链接器标志不会有问题(因为相同的可执行文件可以从shell调试),所以可能问题必须是如何调用gdb从Eclipse内部?也许从Eclipse运行时,gdb会提取不同的配置文件或者什么,而不是从shell运行时?(有人知道吗?)

我真的很感激任何帮助,因为它正在慢慢驱使我循环!

如果有任何其他有用的细节,请告诉我 - Eclipse/cdt/gdb的确切版本号,确切的链接器/编译器命令行等等 - 我很乐意用它们更新这篇文章.

提前谢谢了,

thoughton.

--- 编辑@"14小时前" ---

我尝试了"添加文件系统路径"(带有"搜索子文件夹")选项,但这不起作用.我也试过创建一个新的完全平坦的项目,但这也不起作用.我甚至试图获得Galileo版本(带有CDT更新的eclipse-SDK-3.5.2RC4),但这没有任何区别(除了gdb启动速度较慢).

我注意到这里有一些奇怪的事情:一旦我得到"No source available"消息,如果我然后切换Eclipse的控制台以显示"gdb"控制台,并打开"详细控制台模式"以便我可以进行通信,我可以然后发出"l"和"bt"命令并让它们成功运行,显示我的断点被击中的正确源和堆栈.哪,纠正我,如果我错了,必须意味着信息在那里并正确调用gdb - 那么为什么Eclipse不会看到这些信息呢?

老实说,我已经接近放弃Eclipse了......我也带着如此高的期望来到它.

任何额外的帮助或想法将非常感激.

吨.

Von*_*onC 30

这个帖子建议:

-g -O0
Run Code Online (Sandbox Code Playgroud)

用于为Eclipse CDT编译设置调试标志.
有时,完全重建应用程序很简单(就像这里一样)

另请参见描述类似情况的线程:

我注意到有时在Eclipse中我必须使用调试对话框中的" add filesystem path"(带有" search sub-folders")来专门添加源文件的路径(即使它们在我调试的同一个项目中),但我有没有注意到我必须这样做的模式.但它可能值得一试.


tho*_*ton 9

我找到了答案!这简直令人尴尬.

问题是我使用的是SDL的Release版本而不是Debug版本!(我有来自MacPorts的'libsdl',而我应该有'libsdl-devel'.)

所以我的通用答案是:确保你链接的libs也已经设置了调试标志,并不总是足以确保你自己的代码设置它们.


小智 6

这是此问题的另一个原因.我的配置使用-g3作为gcc的选项.将其更改为-g解决了问题.gcc和gdb之间似乎存在一些不兼容性.我检查了gdb是最新版本(使用apt-get).


uly*_*is2 5

我想为这个旧线程添加一点新鲜血液。

我在尝试编译和调试 gnu arm 项目时遇到了这个问题。

我通过修改 Makefile 解决了这个问题:在“CFLAGS += -Wall -Werror -O3”这一行的末尾添加“-g -O0”