我在windows中的eclipse中使用qDebug(),它没有给我任何输出,似乎Qt从下面的Qt文档将其发送到调试器。
The Qt implementation of these functions prints the text to the stderr output under Unix/X11 and Mac OS X. With Windows, if it is a console application, the text is sent to console; otherwise, it is sent to the debugger.
我的目的不是如何在windows中的eclipse中打印消息。
我的目的是知道为什么 Qt 在 Windows 中不选择向 std 错误流发送调试消息,而在 Mac Os 中却实际上向 std 错误流发送调试消息。
Windows 和 Mac 操作系统之间有什么区别吗?
感谢您的帮助。
最佳答案
由于问题实际上是“为什么”而不是“如何”,因此原因有两个:
Windows 下的 GUI 程序通常没有控制台,它们必须自己打开它(尤其是发布版本当然不会,这会惹恼用户)。它们不会继承启动它们的进程的控制台。 Qt GUI 程序希望像 Windows 下的任何其他 GUI 程序一样运行,除非您明确指定其他方式(例如为 qmake 添加
<CONFIG+=console
)。Windows 中的调试输出通常是使用 Windows 的调试输出功能完成的(一些实用信息 here in download page of DebugView tool ),例如可能每个 Windows IDE 都支持它。 Qt 只是遵循这个软件开发平台约定。
简而言之,这就是 Windows 下默认情况下按照惯例的做法。 如果 Qt 做了一些不同的事情,那么就需要有充分的理由。
默认行为在 Unix(和 Linux)下是不同的,子进程继承 stdin、stdout 和 stderr 到父进程的 TTY,除非采取额外的措施。通常,程序本身不会采取特殊措施,这取决于父级(例如,从 shell/脚本启动程序时添加 2>/dev/null
)。
注意:我没有时间检查 Windows 下 Qt 应用程序的调试版本是否正确 实际上行为有点不同,默认情况下输出到控制台,所以在阅读上面时考虑到这一点。
关于c++ - 为什么 Qt 不将调试消息发送到 Windows 中的 std 错误流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39113398/