Отладочные сигналы Qt, слоты и соединения
Есть ли способ увидеть, какие сигналы запущены, и если есть слот, подключенный к ним? В идеале мы хотели бы видеть все сигналы, а не только те, которые относятся к определенному классу или методу; например QSignalSpy позволяет только отслеживать конкретные сигналы конкретных случаев.
В нашем приложении мы видели проблемы с производительностью из-за того, что сигнал выдается дважды из разных компонентов. В конце концов выяснилось, что был второй экземпляр класса, который должен был быть только один раз. Знание того, какие сигналы испускаются, точно помогает в отладке этого.
Сигналы вызываются через QMetaObject::invoke*
, я надеялся найти что-то там, чтобы зацепиться, но я не нашел ничего очевидного.
Ответы
Ответ 1
(отказ от ответственности, я работаю для KDAB): KDAB Инструмент GammaRay может показывать вам объекты и соединения во время выполнения без каких-либо изменений в источнике. Он проверяет таблицы метаобъектов и делает некоторые крючки для ввода кода, чтобы сделать эту работу.
Ответ 2
QSignalSpy
может помочь вам.
В документах
Класс QSignalSpy позволяет интроспекцию излучения сигнала. QSignalSpy может подключаться к любому сигналу любого объекта и записывать его излучение.
В документах также есть примеры.