Отладочные сигналы Qt, слоты и соединения

Есть ли способ увидеть, какие сигналы запущены, и если есть слот, подключенный к ним? В идеале мы хотели бы видеть все сигналы, а не только те, которые относятся к определенному классу или методу; например QSignalSpy позволяет только отслеживать конкретные сигналы конкретных случаев.

В нашем приложении мы видели проблемы с производительностью из-за того, что сигнал выдается дважды из разных компонентов. В конце концов выяснилось, что был второй экземпляр класса, который должен был быть только один раз. Знание того, какие сигналы испускаются, точно помогает в отладке этого.

Сигналы вызываются через QMetaObject::invoke*, я надеялся найти что-то там, чтобы зацепиться, но я не нашел ничего очевидного.

Ответы

Ответ 1

(отказ от ответственности, я работаю для KDAB): KDAB Инструмент GammaRay может показывать вам объекты и соединения во время выполнения без каких-либо изменений в источнике. Он проверяет таблицы метаобъектов и делает некоторые крючки для ввода кода, чтобы сделать эту работу.

Ответ 2

QSignalSpy может помочь вам.

В документах

Класс QSignalSpy позволяет интроспекцию излучения сигнала. QSignalSpy может подключаться к любому сигналу любого объекта и записывать его излучение.

В документах также есть примеры.