Пользовательский плагин для qt не загружен. Как отлаживать?

Я написал собственный плагин для QCanBus, который просто является копией плагина socketcan, но был переименован, а идентификаторы были изменены на это новое имя.

Я сделал это копирование, чтобы сначала распознать плагин, прежде чем я его изменю.

Я изменил проект qmake, чтобы он выглядел так:

TEMPLATE = lib
TARGET = qtcopysocketcanbus
CONFIG += plugin
QT = core serialbus

HEADERS += \
    copysocketcanbackend.h

SOURCES += \
    main.cpp \
    copysocketcanbackend.cpp

DISTFILES = plugin.json

и добавил plugin.json вот так:

{
    "Key": "copysocketcan"
}

Затем я переименовал все остальное с socketcan на copysocketcan в main.cpp, copysocketcan.cpp и copysocketcan.h.

Когда я создаю проект, я получаю свой файл *.so, который я помещаю в $QT_PLUGIN_PATH/canbus/ на моей цели.

Однако быстрый запуск показывает, что qt перечисляет только плагины, которые поставляются с установкой, а не мой добавленный пользовательский.

Я попытался поставить QLoggingCategory::setFilterRules(QStringLiteral("qt.canbus* = true")); в качестве первой строки в моем коде и надеялся получить больше отладочного вывода, но я получаю только отладочный вывод, который производит мое собственное приложение. Нет вывода из фактического QCanBus.

Итак, мои вопросы

  1. Как включить вывод отладки для qt.canbus? Нужно ли для этого собирать QT с конфигурацией отладки?
  2. Разумен ли мой подход к созданию плагина?
  3. Любые идеи, почему пользовательский плагин не указан?

person darkmattercoder    schedule 17.04.2019    source источник


Ответы (1)


Благодаря полезному комментарию я смог отладить проблемы. Комментатор предложил использовать QT_DEBUG_PLUGINS для отладки вызова плагина. Это привело к появлению сообщения об ошибке, в котором четко говорилось, что подключаемый модуль, который я пытался загрузить, поскольку он не является подключаемым модулем и метаданные подключаемого модуля не могут быть извлечены.

Немного гугления после этих сообщений помогло.

Ответ на вопрос 1:

Да, у вас, по-видимому, есть QT для сборки с отладочной информацией, чтобы получить фактический вывод журнала. В моем случае я настроил фреймворк с помощью --force-debug-info

Для второго вопроса мой подход был действительно разумным, потому что, как оказалось, ответ на вопрос 3 должен включать файл moc, как только макрос Q_OBJECT используется в файле *.cpp, а не в отдельном заголовке, который является чехол для плагинов canbus. Вы можете узнать больше об этом здесь

person darkmattercoder    schedule 23.04.2019