2016-01-20 48 views
13

我正在开发一个使用Visual Studio 2015作为IDE的gcc应用程序。调试器是gdb。Visual Studio 2015“偷”应用程序的控制台

应用程序创建它自己的窗口。当我用DEBUG开关编译时,我需要应用程序也产生一个控制台窗口。它用于从多个线程调试和输出printf。感谢“-mwindows”开关,当我从Visual Studio外部执行应用程序时,此功能正常工作。

不幸的是,当我从Visual Studio中运行应用程序时,它似乎窃取了控制台窗口。没有控制台产生,并且printf的输出被重定向到输出调试窗口。

如果VS控制台实际上正确地打印了“\ n”而不是将它们从输出中剥离出来,这将不是什么大问题。所有内容都打印在同一行上,输出变得不可读。尝试尽我所能,我无法让VS在输出调试窗口中插入换行符。我在网上搜索了很多,这个问题似乎有很好的记录,但我找不到满意的答案。

在这一点上,这两种解决方案会为我工作:

  1. 防止Visual Studio中窃取应用程序的控制台窗口;
  2. 为我的所有printf添加特殊字符,以使输出调试打印行和回车。

编辑: 理想情况下,解决方案应该是跨。平台,在某种意义上,它不应该添加依赖关系WinAPI的。

EDIT2: “\ t”似乎按预期工作。为什么“\ n”不起作用?我也试过“\ r \ n”无济于事。

+0

试图同时使用2个调试工具? –

+2

我怀疑'-mwindows'将PE头中的子系统字段设置为“GUI”。你如何在运行时使用'AllocConsole'并重定向'stdout'来打印?这可能有帮助。看到这里:http://stackoverflow.com/questions/311955/redirecting-cout-to-a-console-in-windows(问题是关于C++的'std :: cout',但它也有一个C解决方案)。 – szczurcio

+2

@WeatherVane:Visual Studio现在支持GDB。我建议你看看[这篇博文](http://blogs.msdn.com/b/vcblog/archive/2015/11/18/announcing-the-vs-gdb-debugger-extension.aspx)。 VS调试器有很多很棒的功能,所以它现在支持成为GDB前端是很好的。 但是,我的问题并不在于实际的调试,这很好。我只想以可读的方式看到我的控制台输出。 –

回答

1

微软的Visual Studio高级PM经理就此问题与我联系。我在大约四个月前(大概在这里发布它的时间)将它作为Visual Studio内部的“反馈”发布。(0127)更新3.

+0

是否有公共问题ID?例如。问题报告的URL。 – bahrep

+0

不幸的是,我没有意识到这一点。与PM经理(原文如此)的讨论非常正式。不过,我很高兴他伸出手。这表明你实际上可以通过VS发送反馈。 –

+0

我只是想过一些像这样的问题条目https://connect.microsoft.com/VisualStudio/feedback/details/807715/making-any-change-to-a-resource-only-dll-project-causes-a -dialog-definition-to-change-an-become-invalid – bahrep

相关问题