2012-03-02 64 views
3

我试图让Eclipse CDT(64位eclipse)在Windows 7上使用GCC工作。当我第一次得到GDB的工作时(这本身就是一个挑战),以调试模式运行程序是获得输出的唯一方法。通常运行它并没有给出任何控制台输出。经过几个小时的谷歌搜索之后,我发现如果在eclipse中将C:/ cygwin/bin添加到我的环境路径中,我可以在正常运行程序时获得输出。然后我在调试模式下运行它,并没有输出。我测试了几次,以确保它是导致问题的路径的附加。这是我正在运行的程序,Eclipse的CDT控制台输出没有显示在路径调试,并没有显示在没有路径运行

#include <iostream> 

using namespace std; 

int main() { 
    cout << "Hello World!" << endl; 
    return 0; 
} 

所以,我怎么能得到正常和调试模式工作,而我为什么必须包括在首位的是路径(它已经在我的cygwin路径和为什么CDT需要它?)?另外,为什么如果我添加一个路径到我的运行配置,它也将被添加到我的调试配置?

+0

当你说“在调试模式下运行程序”是什么意思?在Eclipse中采取什么行动来实现这一目标?你能从调试的角度来浏览代码,还是程序运行并输出到控制台? – 2012-03-12 05:17:11

+0

通过调试模式我的意思是我打F11(相当于单击工具栏中的错误图标),并通过正常运行它我的意思是按Ctrl + F11(相当于单击工具栏中的绿色播放按钮)。 – gsingh2011 2012-03-12 05:51:08

+0

但是你真的能够完成整个项目吗? – 2012-03-12 08:11:40

回答

6

我不认为我可以回答所有问题,但我使用与您完全相同的设置,而且我不得不处理像这样的很多问题(我想知道您是否遇到了麻烦,使用32位/ 64位JVM和Internet浏览)!

必须指定cygwin/bin路径,因为那是gcc,gdb和所有其他cygwin工具和dll所在的位置(我假设您使用的是gcc的cygwin风格而不是MinGW风格)。我相信你必须在Windows环境(使用win32文件路径)中指定它,因为Eclipse使用Windows JVM运行,因此处理win32路径。因此,在cygwin环境中将cygwin/bin添加到PATH变量中并不重要。 CDT正在使用Eclipse查找cygwin,而Eclipse需要从Windows中找到cygwin1.dll。

我可能是完全错误的,但是如果我不得不猜测,我会说你需要确保你已经正确地为这两种配置设置了PATH环境变量。

有一点要注意的是,在Eclipse中有运行配置窗口在调试配置窗口和一个显示具有相同名称的配置没有区别。这两个窗口之间唯一的区别在于,不用调试器就能运行该程序,并且具有用于设置调试设置的选项卡。因此,改变一个设置也会影响另一个设置也就不足为奇了。你可能知道,对于许多项目来说,构建系统的目的是生成两个(有时候更多)二进制文件集:一个包含调试信息/符号(DEBUG),一个包含调试信息/符号(RELEASE)。在这种情况下,您通常在Eclipse中有两种配置:一种运行DEBUG二进制文件,另一种运行RELEASE二进制文件。这两项都将显示在调试配置窗口和运行配置窗口中。重点是你可以在有或没有gdb的情况下运行DEBUG,但RELEASE不能被gdb使用。

这就是说,我不知道为什么将正确的路径添加到运行配置会阻止DEBUG二进制输出到控制台。我怀疑还有其他事情正在发生,可能是调试信息和调试器不匹配。

要(希望)回答你的问题,关于如何使两个配置都能正常工作,请转到全局,并将C:\cygwin\bin;添加到Windows环境变量PATH。我猜这将使两个工作。我会假设你知道如何做到这一点,但如果不是,请发表评论。

其他的事情,试图将汇编和cygwin外壳运行程序。如果它在那里工作,那么在使用eclipse时可能会安全地打赌你的环境变量设置不正确。

希望有帮助!

+0

自Eclipse编辑以来,必须找到cygwin1.dll来运行使用cygwin gcc编译的程序。 – 2012-03-10 07:55:23

+0

首先,您只需将C:\ cygwin \ bin路径添加到Windows路径即可。其次,日食仍然让我困惑。我将它添加到运行/调试配置中,但将它添加到一个实际上将它添加到两个。我查看了我的项目首选项,并且在那里定义了一个PATH变量,它已经有了cygwin路径......所以简而言之,虽然在Eclipse中没有任何意义,但您的解决方案仍然有效。 – gsingh2011 2012-03-11 17:22:17

+0

关于设置项目PATH变量的两段实际上是不相关的。我现在意识到,* C/C++ build-> Environment *页面上设置的路径与此问题无关,因为(稍微明显)该路径仅在编译/构建时使用。只要您的程序正确构建,更改该设置不会影响执行。我相应地更新了我的答案。 – 2012-03-12 04:39:24

3

在gdb 7.3之前添加路径是正确的。现在当我添加路径时,我不能再使用断点,因为它不能再找到dll文件,因为它们不再是路径的一部分。要解决这个问题,您可以按照以下说明轻松添加环境中的整个路径。

left click the project 
enter the RUN/DEBUG settings for the project 
select the executable 
click edit 
select Environment Tab 
click Select... 
scroll down to Path (Case sensitive) 
check mark Path 
press OK 
press OK 
press OK 

因为它出现在gdb的控制台 错误,味精=你可以看到DLL问题“在启动程序与代码0xc00000be退出。” 或 错误,msg =“在启动程序退出代码0x00000135。” ,你可能会得到一个错误提示窗口弹出称它无法清除断点

+0

似乎'Path'情况下,重要的,我更新了环境路径'C:\ cygwin的\ BIN; $ {ENV_VAR:路径}' – bvj 2016-05-12 02:38:38

8

wiki eclipse: 在Windows上的Eclipse CDT,该程序正在运行的标准输出或调试的全缓冲,因为它没有连接到一个Windows控制台,但是一个管道。有关更多详细信息,请参阅错误173732。无论是在主函数的开始每printf的后面添加冲洗来电或添加以下行:

setvbuf(stdout, NULL, _IONBF, 0); 
setvbuf(stderr, NULL, _IONBF, 0); 
+0

这个伟大的工程给我,非常感谢! – fatmck 2015-04-21 05:46:18

0

从Eclipse内不要调试或运行C或C++应用程序,如果他们的目标Cygwin的。 TK链接到“你会有一个不好的时间”模因。

Cygwin stdout/stderr出现问题,如果您从普通的Cygwin控制台(您将运行bash的地方)运行程序,则不会显示出来,但它们几乎可以以其他任何方式显示运行它们。

该程序运行在Linux和其他POSIX支承环境中的其它程序的正常方式是重新路由所述I/O到PTY。 Cygwin无法在Windows中支持pty的100%。

有些问题可以通过@ infoartenovo的答案setvbuf用来调用来改善。

这个问题的另一面是,写入使用Windows的控制台API的应用程序不pty具有很好地工作。

我们正处在一个无法取胜的战争都附带损害。

http://cygwin.com/ml/cygwin/2011-12/msg00236.html https://code.google.com/p/mintty/issues/detail?id=56

2

你需要建立连接 我使用MinGW的。

请按照以下步骤操作。

Goto Project > Properties > C/C++ Build > Settings > Tool Settings (Tab) > MinGW C++ Linker (Option) > Add Command (g++ -static-libgcc -static-libstdc++) (default command is only g++) 
+0

谢谢兄弟!我用一年搜索这个解决方案一次! – 2013-10-05 21:53:07