我在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 Os之间有什么区别吗?
感谢您的帮助。
答案 0 :(得分:2)
由于问题实际上是“为什么”而不是“如何”,原因有两个:
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应用程序的调试版本 实际上行为有点不同,默认情况下输出到控制台,所以在阅读上面时请考虑这一点。