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



我刚刚意识到,在使用QtCreator(不是因为Qt而使用它,而是因为它是一个很好的IDE)和CDB调试CMake(非qt)项目时。

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

可以看到输出打印在调试日志上,这是窗口>视图>调试器日志下的窗格

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

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

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

在旁注中,有一个关闭的错误报告指出

与旧的调试引擎不同之处在于 控制台应用程序的 printf()-输出被抑制 Qt Creator 构建的调试/控制台构建。在以前的版本中, 输出用于转到终端 Qt 创建器启动。

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

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

在 Windows 中,OutputDebugString()转到"应用程序输出"窗口。

您可以通过添加自己的消息函数来过滤噪音:

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

最新更新