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

Я написал собственный плагин для 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. Есть идеи, почему пользовательский плагин не указан?

1 Ответ

0 голосов
/ 23 апреля 2019

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

Немного погуглил после того, как эти сообщения помогли.

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

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

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

...