我可以让 Qt 分析信号槽执行持续时间吗?

Can I get Qt to profile signal-slot execution duration?

我在 windows 上有一个 Qt 控制台应用程序。我想分析它,但 QtCreator 分析在 windows.

上不起作用

我只用了一些 signals/slots。该应用程序是单线程的,每个连接都是 Qt::QueuedConnection.

Qt 可以记录执行从事件循环调用的每个槽所花费的时间吗?这将帮助我找到 CPU 瓶颈,而无需在程序的任何地方手动添加计时器。

是否可以覆盖槽调用机制并测量被调用槽执行时的时间?

排队的插槽调用作为 QMetaCallEvent 传递给接收方 QObject。因此,您可以在 QCoreApplication::notify 传递这些事件时计时:QObject::event 是从该方法中调用的。

这有两个方面:

  1. 计时和数据收集 - 请参阅 this answer 了解完整示例。

  2. 解码 QMetaCallEvent 的内容以了解调用了哪个方法 - 参见 this question.