7#include <QtCore/QPluginLoader>
8#include <QtCore/QCborArray>
9#include <QtCore/QCoreApplication>
11#include <QtCore/QDebug>
12#include <QtCore/QDataStream>
14#include <private/qcoreapplication_p.h>
15#include <private/qqmlengine_p.h>
25int QQmlDebugConnector::s_dataStreamVersion = QDataStream::Qt_4_7;
36 QCoreApplicationPrivate *appD =
37 static_cast<QCoreApplicationPrivate*>(QObjectPrivate::get(qApp));
39 arguments = appD->qmljsDebugArgumentsString();
46void QQmlDebugConnector::setPluginKey(
const QString &key)
48 QQmlDebugConnectorParams *params = qmlDebugConnectorParams();
49 if (params && params->pluginKey != key) {
51 qWarning() <<
"QML debugger: Cannot set plugin key after loading the plugin.";
53 params->pluginKey = key;
57void QQmlDebugConnector::setServices(
const QStringList &services)
59 QQmlDebugConnectorParams *params = qmlDebugConnectorParams();
61 params->services = services;
64QString QQmlDebugConnector::commandLineArguments()
66 QQmlDebugConnectorParams *params = qmlDebugConnectorParams();
69 return params->arguments;
72QQmlDebugConnector *QQmlDebugConnector::instance()
74 QQmlDebugConnectorParams *params = qmlDebugConnectorParams();
78 if (!QQmlEnginePrivate::qml_debugging_enabled.load(std::memory_order_relaxed)) {
79 if (!params->arguments.isEmpty()) {
80 qWarning().noquote() << QString::fromLatin1(
81 "QML Debugger: Ignoring \"-qmljsdebugger=%1\". Debugging "
82 "has not been enabled.").arg(params->arguments);
83 params->arguments.clear();
88 if (!params->instance) {
89 if (!params->pluginKey.isEmpty()) {
90 params->instance = loadQQmlDebugConnector(params->pluginKey);
91 }
else if (params->arguments.isEmpty()) {
93 }
else if (params->arguments.startsWith(QLatin1String(
"connector:"))) {
94 static const int connectorBegin =
int(strlen(
"connector:"));
96 int connectorEnd = params->arguments.indexOf(QLatin1Char(
','), connectorBegin);
97 if (connectorEnd == -1)
98 connectorEnd = params->arguments.size();
100 params->instance = loadQQmlDebugConnector(params->arguments.mid(
102 connectorEnd - connectorBegin));
104 params->instance = loadQQmlDebugConnector(
105 params->arguments.startsWith(QLatin1String(
"native")) ?
106 QStringLiteral(
"QQmlNativeDebugConnector") :
107 QStringLiteral(
"QQmlDebugServer"));
110 if (params->instance) {
111 const auto metaData = metaDataForQQmlDebugService();
112 for (
const QPluginParsedMetaData &md : metaData) {
113 const auto keys = md.value(QtPluginMetaDataKeys::MetaData).toMap()
114 .value(QLatin1String(
"Keys")).toArray();
115 for (
const QCborValue key : keys) {
116 QString keyString = key.toString();
117 if (params->services.isEmpty() || params->services.contains(keyString))
118 loadQQmlDebugService(keyString);
124 return params->instance;
127QQmlDebugConnectorFactory::~QQmlDebugConnectorFactory()
130 QQmlDebugConnectorParams *params = qmlDebugConnectorParams();
132 params->pluginKey.clear();
133 params->arguments.clear();
134 params->services.clear();
135 delete params->instance;
136 params->instance =
nullptr;
142#include "moc_qqmldebugconnector_p.cpp"
#define Q_QML_DEBUG_PLUGIN_LOADER(interfaceName)
QQmlDebugConnector * instance
QQmlDebugConnectorParams()