未加载 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.cpp
、copysocketcan.cpp
和 copysocketcan.h
中将其他所有内容从 socketcan
重命名为 copysocketcan
。
当我构建项目时,我得到了我的 *.so 文件,我将其放入我的目标 $QT_PLUGIN_PATH/canbus/
中。
然而,快速启动显示,qt 只列出安装附带的插件,而不是我添加的自定义插件。
我尝试将 QLoggingCategory::setFilterRules(QStringLiteral("qt.canbus* = true"));
作为代码的第一行并希望获得更多调试输出,但我只获得了我自己的应用程序生成的调试输出。实际 QCanBus
.
没有输出
所以我的问题是
- 如何为
qt.canbus
启用调试输出?我必须为此构建带有调试配置的 QT 吗?
- 我创建插件的方法合理吗?
- 有什么想法,为什么没有列出自定义插件?
通过有用的评论,我能够调试问题。评论者建议使用 QT_DEBUG_PLUGINS
来调试插件调用。这导致出现一条错误消息,清楚地指出,我试图加载的插件是因为它 不是插件 并且无法提取 插件元数据。
在这些消息有所帮助后进行了一些谷歌搜索。
问题 1 的答案是:
是的,您显然需要使用调试信息构建 QT,以获得实际的日志输出。
就我而言,我使用 --force-debug-info
配置了框架
对于第二个问题,我的做法确实是合理的,因为作为问题3的回答结果是必须尽快包含moc
文件,因为其中使用了Q_OBJECT
宏一个 *.cpp
文件,而不是在单独的 header 中,canbus 插件就是这种情况。您可以阅读更多相关信息 here
我为 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.cpp
、copysocketcan.cpp
和 copysocketcan.h
中将其他所有内容从 socketcan
重命名为 copysocketcan
。
当我构建项目时,我得到了我的 *.so 文件,我将其放入我的目标 $QT_PLUGIN_PATH/canbus/
中。
然而,快速启动显示,qt 只列出安装附带的插件,而不是我添加的自定义插件。
我尝试将 QLoggingCategory::setFilterRules(QStringLiteral("qt.canbus* = true"));
作为代码的第一行并希望获得更多调试输出,但我只获得了我自己的应用程序生成的调试输出。实际 QCanBus
.
所以我的问题是
- 如何为
qt.canbus
启用调试输出?我必须为此构建带有调试配置的 QT 吗? - 我创建插件的方法合理吗?
- 有什么想法,为什么没有列出自定义插件?
通过有用的评论,我能够调试问题。评论者建议使用 QT_DEBUG_PLUGINS
来调试插件调用。这导致出现一条错误消息,清楚地指出,我试图加载的插件是因为它 不是插件 并且无法提取 插件元数据。
在这些消息有所帮助后进行了一些谷歌搜索。
问题 1 的答案是:
是的,您显然需要使用调试信息构建 QT,以获得实际的日志输出。
就我而言,我使用 --force-debug-info
对于第二个问题,我的做法确实是合理的,因为作为问题3的回答结果是必须尽快包含moc
文件,因为其中使用了Q_OBJECT
宏一个 *.cpp
文件,而不是在单独的 header 中,canbus 插件就是这种情况。您可以阅读更多相关信息 here