【问题标题】:Cross-platform GUI application console for debug messages C++用于调试消息 C++ 的跨平台 GUI 应用程序控制台
【发布时间】: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 了。

标签: c++ cross-platform


【解决方案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 并没有真正解决你的问题。尽管其他解决方案之上使用它可能对您来说仍然很好,以获得比仅使用标准输出/错误更高级的日志记录。
  • 是的,它看起来确实很有趣,所以它仍然是一个有用的信息:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2010-11-17
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
相关资源
最近更新 更多