未加载 qt 的自定义插件。如何调试?

Custom plugin for qt is not loaded. How to debug?

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

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

当我构建项目时,我得到了我的 *.so 文件,我将其放入我的目标 $QT_PLUGIN_PATH/canbus/ 中。

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

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

没有输出

所以我的问题是

  1. 如何为 qt.canbus 启用调试输出?我必须为此构建带有调试配置的 QT 吗?
  2. 我创建插件的方法合理吗?
  3. 有什么想法,为什么没有列出自定义插件?

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

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

问题 1 的答案是:

是的,您显然需要使用调试信息构建 QT,以获得实际的日志输出。 就我而言,我使用 --force-debug-info

配置了框架

对于第二个问题,我的做法确实是合理的,因为作为问题3的回答结果是必须尽快包含moc文件,因为其中使用了Q_OBJECT宏一个 *.cpp 文件,而不是在单独的 header 中,canbus 插件就是这种情况。您可以阅读更多相关信息 here