Len*_*and 4 gdb signals-slots qt5
我在槽方法上设置了一个断点并启动gdb来调试我的Qt5应用程序。我想知道从代码中的哪个位置调用这个插槽(通过 Qt5信号系统)。
我天真的方法以在断点处暂停程序而告终,但堆栈跟踪都是 Qt5 内部结构,不知道程序的哪个部分实际将信号发送到这个插槽(或者天气它是一个排队或直接调用:

这是可能吗?如何?
谢谢!
更新
唯一一次您不会在堆栈回溯中看到信号调用者的时间是连接排队时。
对于直接连接,您应该看到如下内容:
0 Receiver::baz() <-- slot function that received the signal
1 Receiver::qt_static_metacall()
2 QMetaObject::activate()
3 Sender::bar() <-- function with the name of the signal
4 Sender::foo() <-- function that called emit
5 QWidget::event()
...
Run Code Online (Sandbox Code Playgroud)
对于排队连接,情况更为复杂。但是您可以将以下内容添加到您的插槽中:
QString __sender__ = sender()->metaObject()->className();
Run Code Online (Sandbox Code Playgroud)
这将为您提供发送信号的对象的类名。你可以把它变成一个宏并洒在你的代码中。
或者,如果您有多个同一类的对象,并且需要知道哪个发送了信号,则可以使用该sender()函数并比较对象地址等。