c++ - 为什么 Qt 不将调试消息发送到 Windows 中的 std 错误流?

标签 c++ windows qt pyqt

我在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/

相关文章:

linux - 在 Qt 目录中找不到配置命令行工具(Linux 32 位)

c++ - 循环 typedef 列表

c++ - OpenMP 和内存带宽限制

windows - 从通知区域移除 NotifyIcon

c# - 是否有一种编程方式可以 Hook 用户登录和注销(Windows SBS 2003)以实现简单日志记录?

windows - 使用MSVC2010用/MT编译静态QT库

c++ - C++中遍历队列

c++ - 时间序列 "forecast"来自 C++ 的 R 包

c - 围绕 OpenSSH 的简单 C 包装器(在 Windows 上使用 Cygwin)

c++ - 处理 QSqlDatabase 连接