调试时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::endl
或 std::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。
您可以通过添加自己的消息功能来过滤掉噪音:
我在使用 QtCreator(不是因为 Qt 而使用它,而是因为它很好 IDE)和 CDB 调试 CMake(非 Qt)项目时才意识到以下内容。
程序有一个简单的 cout
代码行,当我使用 Ctrl+R
运行 程序时,它正确显示在 "Application Output" 窗格中。但是,如果我使用 F5
调试相同的构建&运行 配置,我看不到任何输出。
QtCreator在第二种情况下将stdout转发到哪里?
尝试在 cout
末尾使用 std::endl
或 std::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。
您可以通过添加自己的消息功能来过滤掉噪音: