【问题标题】:Custom plugin for qt is not loaded. How to debug?未加载 qt 的自定义插件。如何调试?
【发布时间】:2019-09-07 22:49:33
【问题描述】:

我为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 qt5 can-bus socketcan qtplugin


【解决方案1】:

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

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

问题1的答案是:

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

配置了框架

对于第二个问题,我的方法确实是合理的,因为作为问题 3 的答案,必须尽快包含 moc 文件,因为在 *.cpp 文件中使用了 Q_OBJECT 宏,并且不在单独的标题中,canbus 插件就是这种情况。你可以阅读更多关于here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多