Debug Qt signals, slots and connections

Ivo picture Ivo · Sep 20, 2010 · Viewed 8k times · Source

Is there a way to see which signals are fired, and if there is a slot connected to them? Ideally, we'd like to see all signals, not just those of a particular class or method; e.g. QSignalSpy only allows us to track specific signals of specific instances.

In our application, we've seen performance problems because of a signal being emitted twice from different components. In the end, it turned out that there was a second instance of a class that should have only been there once. Knowing which signals are emitted exactly helps in debugging this.

Signals are called via QMetaObject::invoke*, I was hoping to find something there to hook into, but I found nothing obvious.

Answer

James Turner picture James Turner · Jun 8, 2016

(disclaimer, I work for KDAB) : KDAB's GammaRay tool can show you objects and connections at runtime, without requiring any source changes. It inspects the meta-object tables and does some code-injection hooks to make this work.