调试时QtCreator的标准输出在哪里?

Where is the standard output of QtCreator when debugging?

我在使用 QtCreator(不是因为 Qt 而使用它,而是因为它很好 IDE)和 CDB 调试 CMake(非 Qt)项目时才意识到以下内容。

程序有一​​个简单的 cout 代码行,当我使用 Ctrl+R 运行 程序时,它正确显示在 "Application Output" 窗格中。但是,如果我使用 F5 调试相同的构建&运行 配置,我看不到任何输出。 QtCreator在第二种情况下将stdout转发到哪里?

尝试在 cout 末尾使用 std::endlstd::flush(如果您不想换行),例如std::cout << "Hello" << std::endl;

您可以看到打印在调试日志上的输出,它是 Window->Views->Debugger Log

下的一个窗格

右窗格显示了预期的输出。不是一个完整的解决方案,而是一个非常接近的解决方法。

我相信 qt creator 只能看到 cdb 的输出,它不会转发程序的输出,而只会转发它自己的输出。事实上,应用程序输出窗格显示一行 cdb 的输出,与我在程序中进行的系统调用相关。

此解决方法会导致奇怪的副作用。当 cdb 遇到断点时,该窗格的颜色方案将重置为默认值。

在旁注中,有一份 closed bug 报告指出

There is a difference to the old debugging engine in that the printf()-output of console-applications is suppressed in debug/console-builds of Qt Creator builds. In previous versions, the output used to go to the terminal Qt Creator was started in.

在我的情况下不正确,因为从 cmd 启动 qtcreator 与 cmd 分离。

在 Windows 中,OutputDebugString() 转到“应用程序输出”window。

您可以通过添加自己的消息功能来过滤掉噪音:

https://doc.qt.io/qt-6/qtglobal.html#qInstallMessageHandler