Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: LisandreL от Апрель 10, 2018, 15:08



Название: Отладка очереди слотов
Отправлено: LisandreL от Апрель 10, 2018, 15:08
Можно как-то добраться до очереди слотов данного потока/объекта?

Как минимум хотелось бы получить количество вызванных слотов в очереди, как максимум знать каких слотов там сколько (ну или какого слота больше всего).


Название: Re: Отладка очереди слотов
Отправлено: qate от Апрель 10, 2018, 21:51
недавно смотрел https://github.com/KDAB/GammaRay
очень много может рассказать о программе, наверно все что происходит внутри qt


Название: Re: Отладка очереди слотов
Отправлено: Igors от Апрель 11, 2018, 09:25
Что за "вызванных"? Если они уже вызваны, то в очереди их не будет. Если речь просто об очереди событий, то может стоит пошшупать QThreadData::posEventList (qthread_p.h)


Название: Re: Отладка очереди слотов
Отправлено: LisandreL от Апрель 12, 2018, 12:22
Igors, да, под вызванными подразумевались слоты стоящие в очереди, то есть сигнал уже вызван, а слот ещё не отработал.

Код:
    QThreadData* data = QThreadData::get2( currentThread() );
    QVector<QPostEvent> evs = data->postEventList;
    foreach ( QPostEvent ev, evs )
    {
        if ( ev.event->type() == QEvent::MetaCall )
        {
            QMetaCallEvent* mev = static_cast<QMetaCallEvent*>( ev.event );
            QMetaMethod signal = mev->sender()->metaObject()->method(mev->signalId());
            qDebug() << "Metacall:" << ev.receiver << mev->sender() << signal.methodSignature();
        }
    }

В целом вроде то, что надо, только почему-то signal.methodSignature() выдаёт неправильные данные (явно другой сигнал)…


Название: Re: Отладка очереди слотов
Отправлено: Igors от Апрель 12, 2018, 15:47
Возможно стоит считаться с тем что очередь может измениться в течение ее просмотра (там мутекс есть)