用于调试消息 C++ 的跨平台 GUI 应用程序控制台

Posted

技术标签:

【中文标题】用于调试消息 C++ 的跨平台 GUI 应用程序控制台【英文标题】:Cross-platform GUI application console for debug messages C++ 【发布时间】:2013-05-13 18:03:30 【问题描述】:

我正在用 C++ 编写游戏。我想使用 std::cout 从我的代码中打印调试消息,但由于这是一个 GUI 应用程序,因此默认情况下没有可打印的控制台。我尝试过像这样从 CMD 运行它:

start Debug/hydro.exe

但无济于事。

在 Windows 8 x86_64 上使用带有 Win32 项目的 Visual Studio 2012,以下代码实现了我正在寻找的内容:

#include <Windows.h>
...
AllocConsole();
freopen("CONIN$", "r",stdin);
freopen("CONOUT$", "w",stdout);
freopen("CONOUT$", "w",stderr);

但是,我认为这不是跨平台的(如果我错了,请纠正我!)并且希望我的应用程序可以在 Linux 和 Mac OS X 上运行。

有没有跨平台的解决方案?当然,越简单越好!

【问题讨论】:

如果您想要“控制台”调试消息,只需从终端窗口运行程序,并使用std::cout?这就是大多数程序(游戏或其他程序)的方式。 我试过这个(这是我在 Linux 上解决程序的方法),但没有打印出来。我已经在使用 std::cout 了。 【参考方案1】:

我不知道有任何产品在 Linux 世界中执行此操作 - 您应该从 shell 启动代码,并且输出显示在 shell 窗口中。

这样包装应该会有所帮助:

#ifdef _WIN32
// Windows-only code here
#endif

在windows外不编译代码,在windows内编译代码!

【讨论】:

这是一个有效的宏,是的。我希望我可以传达这个原则,而不必查找相关宏的名称...... ;)【参考方案2】:

如果您的代码依赖于&lt;Windows.h&gt;,则它肯定不是跨平台的。

查看log4cxx 以了解跨平台日志记录。这是一个相当稳定、成熟的平台。

PS:祝跨平台 GUI 编程好运。 GUI 编程通常是非常特定于平台的。像Qt 这样的框架可能会有很大帮助,如果您正在制作 3D 图形,请务必使用 OpenGL 而不是 DirectX。

【讨论】:

我目前正在使用 SFML,虽然我也对 Qt 感兴趣!我现在看看log4cxx,谢谢!如果可行,我会将其标记为解决方案。 另一种解决方案对我有用,而且要容易得多。不过谢谢! @JoshuaGerrard 不是 Windows 程序员,我想我可能误解了你的问题。你说得对,我现在理解的 log4cxx 并没有真正解决你的问题。尽管其他解决方案之上使用它可能对您来说仍然很好,以获得比仅使用标准输出/错误更高级的日志记录。 是的,它看起来确实很有趣,所以它仍然是一个有用的信息:)

以上是关于用于调试消息 C++ 的跨平台 GUI 应用程序控制台的主要内容,如果未能解决你的问题,请参考以下文章

ANSI C 兼容或 C++ 跨平台 GUI 库?

如何在 WPF C# GUI 中使用跨平台 C++

还在为寻找C++跨平台用户界面框架库而发愁吗?

创建一个开箱即用的可移植、跨平台、开源 C++ GUI 应用程序?

C ++的最佳GUI编译器[重复]

《团队项目》日志一