Eclipse CDT控制台输出未显示在带路径的调试中,并且没有显示在没有路径的运行中

gsi*_*011 3 c++ eclipse console gcc eclipse-cdt

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

#include <iostream>

using namespace std;

int main() {
    cout << "Hello World!" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

那么我如何才能使普通模式和调试模式都工作,为什么我必须首先包含该路径(它已经在我的cygwin路径中,为什么CDT需要它?)?另外,为什么如果我添加一个路径到我的运行配置,它也会被添加到我的调试配置?

小智 8

来自wiki eclipse:在Windows上的Eclipse CDT中,正在运行或调试的程序的标准输出是完全缓冲的,因为它没有连接到Windows控制台,而是连接到管道.有关更多详细信息,请参阅错误173732.在每个printf之后添加flush调用,或者在main函数的开头添加以下行:

setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0); 
Run Code Online (Sandbox Code Playgroud)


Mik*_*e G 6

我不认为我可以回答所有事情,但我使用与你完全相同的设置,我不得不处理这样的一些问题(我想知道你是否有麻烦如何使用32- bit/64位JVM和Internet浏览)!

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

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

需要注意的一点是,在Eclipse 中," 调试配置"窗口中显示的配置与" 运行配置"窗口中具有相同名称的配置之间没有区别.两个窗口之间的唯一区别是,一个将在不使用调试器的情况下运行程序,并且具有用于设置调试设置的选项卡.因此,更改一个中的设置也会影响另一个也就不足为奇了.

您可能知道,对于许多项目,构建系统设置为生成两组(有时更多)二进制文件:一组具有调试信息/符号(DEBUG),另一组没有(RELEASE).在这种情况下,您通常在Eclipse中有两个配置:一个用于运行DEBUG二进制文件,另一个用于运行RELEASE二进制文件.这两个都将显示在" 调试配置"窗口和" 运行配置"窗口中.关键是您可以使用或不使用gdb运行DEBUG,但gdb不能使用RELEASE.

也就是说,我不确定为什么在运行配置中添加正确的路径会阻止DEBUG二进制文件输出到控制台.我怀疑这里还有其他的东西,可能是调试信息和调试器的不匹配.

为了(希望)回答你关于如何使两个配置工作的问题,去全猪只需添加C:\cygwin\bin;到Windows PATH环境变量.我猜这将允许两者都有效.我假设你知道怎么做,但如果不是,请发表评论.

另一件要尝试的是从cygwin shell编译和运行程序.如果它在那里工作,那么PATH使用eclipse时你的环境变量设置不正确可能是一个安全的选择.

希望有所帮助!