【发布时间】: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 窗口中插入换行符。我在网上搜索了很多,这个问题似乎有据可查,但我找不到满意的答案。
此时,这些解决方案中的任何一个都适合我:
- 防止 Visual Studio 窃取应用程序的控制台窗口;
- 为我的所有 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