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

4
我刚才在使用QtCreator(不是因为它是Qt,而是因为它是一个好用的IDE)和CDB调试一个CMake(非Qt)项目时意识到以下问题。
程序中有一行简单的cout代码,在我使用Ctrl+R运行程序时可以在“应用程序输出”面板中正确显示。但是,如果我使用F5调试同一构建和运行配置,则无法看到任何输出。 QtCreator在第二种情况下将标准输出转发到哪里了?

我有完全相同的问题,你当时找到解决方案了吗? - quimnuss
很遗憾,不是的。由于这是GUI应用程序的调试输出,我已将其记录到%TEMP%中。 - Tim Meyer
@quimnuss 如果你找到了解决办法,甚至只是对这种行为的解释,请发表一个答案,我会接受它。 - Tim Meyer
这个问题并没有太多相关条目,只有这一个:https://dev59.com/lmQm5IYBdhLWcg3wug4u - quimnuss
有点找到了解决方案,请看答案。 - quimnuss
3个回答

4
您可以在调试日志的窗口下面的Window->Views->Debugger Log中查看输出结果。
右侧窗格显示期望的输出。这不是完整的解决方案,但是非常接近解决方案。
我相信qt creator只能看到来自cdb的输出,而不会转发程序的输出,只转发它自己的输出。实际上,应用程序输出窗格显示了我在程序内部进行的一个系统调用的cdb输出的一行。
这种解决方法会导致奇怪的副作用。当cdb触发断点时,该窗格的颜色方案将重置为默认值。
顺带说一句,有一个已关闭的错误报告声称

与旧的调试引擎相比,控制台应用程序的printf()输出在Qt Creator构建的debug / console中被抑制。在以前的版本中,输出通常会发送到启动Qt Creator的终端。

在我的情况下并不是如此,因为从cmd启动qtcreator会分离出cmd。

在Windows中,我正在执行“fprintf(stderr,...)”,但我没有看到它出现在调试器日志中。不过有很多其他难以理解的东西。 - Pierre

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

实际上,在我的情况下,这是主要原因。似乎qt窗口被钩子附加到流的刷新调用,并且仅在标准输出/错误流被刷新时更新窗口内容。这解决了我的问题。谢谢! - foo

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接