【问题标题】:Visual Studio 2015 "stealing" the application's consoleVisual Studio 2015“窃取”应用程序的控制台
【发布时间】:2016-04-26 20:19:20
【问题描述】:

我正在使用 Visual Studio 2015 作为 IDE 开发一个 gcc 应用程序。调试器是 gdb。

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

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

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

此时,这些解决方案中的任何一个都适合我:

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

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

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

【问题讨论】:

  • 我怀疑-mwindows 将 PE 标头中的子系统字段设置为“GUI”。您如何在运行时使用AllocConsole 并重定向stdout 以便能够打印?这可能会有所帮助。见这里:stackoverflow.com/questions/311955/…(问题是关于 C++ 的std::cout,但它也有 C 解决方案)。
  • @WeatherVane :Visual Studio 现在支持 GDB。我建议你看看this blog post。 VS 调试器有很多很棒的特性,所以它现在支持作为 GDB 前端很好。不过,我的问题不在于实际的调试,这很好用。我只想以一种可读的方式查看我的控制台输出。
  • @szczurcio :使用 AllocConsole 将 window.h 的依赖项添加到我的项目中。如果解决方案不涉及添加 WinAPI 代码,我更愿意。
  • @szczurcio :没有明确说明,但它是跨平台开发。我只是在Windows下使用VS2015。
  • @AdrianMcCarthy 当我省略 -mwindows 参数时,这就是我正在做的事情。请记住,正如我所说,只要我不从 Visual Studio 运行,我就有一个工作控制台。

标签: c debugging gcc visual-studio-2015 console-application


【解决方案1】:

Microsoft 的 Visual Studio 高级 PM 经理就这个问题联系了我。大约四个月前,我在 Visual Studio 中将它作为“反馈”发布(大约在我在这里发布的时候)..

他承认了这个问题,并表示他们将尝试通过 Update 3 添加对外部控制台的支持。

【讨论】:

  • 有公开的问题ID吗?例如。问题报告的 URL。
  • 不幸的是,这不是我所知道的。与 PM 经理(原文如此)的讨论非常正式。不过,我很高兴他伸出了手。这表明你实际上可以从 VS 发送反馈中得到一些东西。
  • 我只是想到了一些像这样的问题条目connect.microsoft.com/VisualStudio/feedback/details/807715/…
  • 不,没有那样的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 2016-02-13
相关资源
最近更新 更多