用于调试消息 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】:如果您的代码依赖于<Windows.h>
,则它肯定不是跨平台的。
查看log4cxx 以了解跨平台日志记录。这是一个相当稳定、成熟的平台。
PS:祝跨平台 GUI 编程好运。 GUI 编程通常是非常特定于平台的。像Qt 这样的框架可能会有很大帮助,如果您正在制作 3D 图形,请务必使用 OpenGL 而不是 DirectX。
【讨论】:
我目前正在使用 SFML,虽然我也对 Qt 感兴趣!我现在看看log4cxx,谢谢!如果可行,我会将其标记为解决方案。 另一种解决方案对我有用,而且要容易得多。不过谢谢! @JoshuaGerrard 不是 Windows 程序员,我想我可能误解了你的问题。你说得对,我现在理解的 log4cxx 并没有真正解决你的问题。尽管在其他解决方案之上使用它可能对您来说仍然很好,以获得比仅使用标准输出/错误更高级的日志记录。 是的,它看起来确实很有趣,所以它仍然是一个有用的信息:)以上是关于用于调试消息 C++ 的跨平台 GUI 应用程序控制台的主要内容,如果未能解决你的问题,请参考以下文章