未加载qt的自定义插件。怎么调试?

问题描述 投票:0回答:1

我为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"
}

然后我在socketcancopysocketcanmain.cpp中将其他所有内容从copysocketcan.cpp重命名为copysocketcan.h

当我构建项目时,我得到了我的* .so文件,我把它放在我的目标上的$QT_PLUGIN_PATH/canbus/

但是,快速启动显示,qt仅列出安装附带的插件,而不是我添加的自定义插件。

我尝试将QLoggingCategory::setFilterRules(QStringLiteral("qt.canbus* = true"));作为我的代码中的第一行,并希望获得更多的调试输出,但我只得到我自己的应用程序正在生成的调试输出。没有来自实际QCanBus的输出。

所以我的问题是

  1. 如何为qt.canbus启用调试输出?我是否必须使用调试配置构建QT?
  2. 我创建插件的方法是否合理?
  3. 任何想法,为什么自定义插件没有列出?
qt qt5 can-bus socketcan qtplugin
1个回答
0
投票

通过一个有用的评论,我能够调试问题。评论员建议使用QT_DEBUG_PLUGINS来调试插件调用。这导致出现错误消息,清楚地说明,我试图加载的插件因为它不是插件而且无法提取插件元数据。

在这些消息帮助之后进行了一些谷歌搜索。

问题1的答案是:

是的,你显然有QT用调试信息构建,以获得实际的日志输出。在我的例子中,我使用--force-debug-info配置了框架

对于第二个问题,我的方法确实合理,因为问题3的答案结果是必须尽快包含moc文件,因为Q_OBJECT宏在*.cpp文件中使用而不是在单独的标题中,这是canbus插件的案例。你可以阅读更多有关here的信息

© www.soinside.com 2019 - 2024. All rights reserved.