Visual Studio 2015附加控制台I / O的问题

时间:2015-12-07 21:19:01

标签: c++ visual-c++ visual-studio-2015

我最近升级了旧项目的解决方案以使用visual studio 2015.该应用程序运行一个opengl应用程序。应用程序为输出分配单独的控制台。我使用控制台从我的opengl应用程序中输出相关的调试信息。

我已完全升级了我的项目并且工作正常。我的问题是,在升级我的项目以使用Visual Studio 2013(v120)工具集中的Visual Studio 2015(v140)工具集时,当我使用任何控制台输出函数(stdio.h或iostream)时,控制台不会显示任何信息。这使调试变得更加痛苦。

要清楚我可以将我的项目交换回使用Visual Studio 2013(v120)工具集,当我输出到控制台时,控制台将显示信息。

是否有人了解新工具集阻止我在控制台窗口中查看信息的原因?我打算以不同方式设置控制台吗?

链接控制台输出重定向的清晰简单示例。 (我会举出更多例子,但我的链接有限) http://asawicki.info/news_1326_redirecting_standard_io_to_windows_console.html

我的控制台输出创建示例:

AllocConsole();
long lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
int hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
FILE *fp = _fdopen(hConHandle, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);

2 个答案:

答案 0 :(得分:7)

此:

*stdout = *fp;

无效。 FILE是一种不透明的类型。您只能通过stdio库函数(FILEfopenfreopen等)操纵fread

如果要重新打开其中一个标准流来引用控制台,可以采用一种支持的方式:

freopen("CONOUT$", "w", stdout);

答案 1 :(得分:0)

检查你的调试中的内容 - >选项和设置 - >调试 - > VS中的输出窗口。

对我来说效果很好,如果在第一个标签中一切都打开并且第二个标签关闭(数据绑定中的错误)。

希望能够发挥作用。