From 2217eef3a3f5832b6955dc4a2e4ff061364a6a15 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 17 Nov 2015 16:40:27 +0100 Subject: [PATCH] QmlDebug: Allow different styles of command line arguments We have tcp, local, and native by now. We have to expose that in a clean way. Change-Id: I0ce7be693aa7f47ebea7abe435a224a176b6c94b Reviewed-by: Joerg Bornemann --- .../qmldebug/qmldebugcommandlinearguments.h | 27 ++++++++++++++----- src/plugins/debugger/debuggerruncontrol.cpp | 4 ++- src/plugins/ios/iosrunner.cpp | 2 +- .../qmlprofiler/localqmlprofilerrunner.cpp | 4 +-- src/plugins/qnx/qnxanalyzesupport.cpp | 2 +- src/plugins/qnx/qnxdebugsupport.cpp | 2 +- .../remotelinux/remotelinuxanalyzesupport.cpp | 2 +- .../remotelinux/remotelinuxdebugsupport.cpp | 5 ++-- src/plugins/winrt/winrtdebugsupport.cpp | 2 +- 9 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/libs/qmldebug/qmldebugcommandlinearguments.h b/src/libs/qmldebug/qmldebugcommandlinearguments.h index f00559aaf19..fd2c5645b09 100644 --- a/src/libs/qmldebug/qmldebugcommandlinearguments.h +++ b/src/libs/qmldebug/qmldebugcommandlinearguments.h @@ -60,18 +60,31 @@ static inline QString qmlDebugServices(QmlDebugServicesPreset preset) } static inline QString qmlDebugCommandLineArguments(QmlDebugServicesPreset services, - quint16 port = 0) + const QString &connectionMode, bool block) { if (services == NoQmlDebugServices) return QString(); - if (services == QmlNativeDebuggerServices) - return QString::fromLatin1("-qmljsdebugger=native,services:%1") - .arg(qmlDebugServices(services)); + return QString::fromLatin1("-qmljsdebugger=%1%2,services:%3").arg(connectionMode) + .arg(QLatin1String(block ? ",block" : "")).arg(qmlDebugServices(services)); +} - return QString::fromLatin1("-qmljsdebugger=port:%1,block,services:%2") - .arg(port ? QString::number(port) : QStringLiteral("%qml_port%")) - .arg(qmlDebugServices(services)); +static inline QString qmlDebugTcpArguments(QmlDebugServicesPreset services, quint16 port = 0, + bool block = true) +{ + return qmlDebugCommandLineArguments(services, port ? QString::fromLatin1("port:%1").arg(port) : + QStringLiteral("port:%qml_port%"), block); +} + +static inline QString qmlDebugNativeArguments(QmlDebugServicesPreset services, bool block = true) +{ + return qmlDebugCommandLineArguments(services, QLatin1String("native"), block); +} + +static inline QString qmlDebugLocalArguments(QmlDebugServicesPreset services, const QString &socket, + bool block = true) +{ + return qmlDebugCommandLineArguments(services, QLatin1String("file:") + socket, block); } } // namespace QmlDebug diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index ae9b87cdc0c..d4bbe513276 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -532,7 +532,9 @@ void DebuggerRunControlCreator::enrich(const RunConfiguration *runConfig, const service = QmlDebug::QmlDebuggerServices; } if (m_rp.startMode != AttachExternal) - QtcProcess::addArg(&m_rp.processArgs, QmlDebug::qmlDebugCommandLineArguments(service, m_rp.qmlServerPort)); + QtcProcess::addArg(&m_rp.processArgs, wantCppDebugger && m_rp.nativeMixedEnabled ? + QmlDebug::qmlDebugNativeArguments(service, false) : + QmlDebug::qmlDebugTcpArguments(service, m_rp.qmlServerPort)); } } diff --git a/src/plugins/ios/iosrunner.cpp b/src/plugins/ios/iosrunner.cpp index 914ab37677b..603e7d81399 100644 --- a/src/plugins/ios/iosrunner.cpp +++ b/src/plugins/ios/iosrunner.cpp @@ -82,7 +82,7 @@ QStringList IosRunner::extraArgs() { QStringList res = m_arguments; if (m_qmlPort != 0) - res << QmlDebug::qmlDebugCommandLineArguments(m_qmlDebugServices, m_qmlPort); + res << QmlDebug::qmlDebugTcpArguments(m_qmlDebugServices, m_qmlPort); return res; } diff --git a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp index b955645bef5..2d59e4e3a19 100644 --- a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp +++ b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp @@ -121,8 +121,8 @@ LocalQmlProfilerRunner::~LocalQmlProfilerRunner() void LocalQmlProfilerRunner::start() { - QString arguments = QmlDebug::qmlDebugCommandLineArguments(QmlDebug::QmlProfilerServices, - m_configuration.port); + QString arguments = QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlProfilerServices, + m_configuration.port); if (!m_configuration.executableArguments.isEmpty()) arguments += QLatin1Char(' ') + m_configuration.executableArguments; diff --git a/src/plugins/qnx/qnxanalyzesupport.cpp b/src/plugins/qnx/qnxanalyzesupport.cpp index 56dec1bbf0c..6c2402d4dd7 100644 --- a/src/plugins/qnx/qnxanalyzesupport.cpp +++ b/src/plugins/qnx/qnxanalyzesupport.cpp @@ -99,7 +99,7 @@ void QnxAnalyzeSupport::startExecution() const QStringList args = QStringList() << Utils::QtcProcess::splitArgs(m_runControl->startParameters().debuggeeArgs) - << QmlDebug::qmlDebugCommandLineArguments(QmlDebug::QmlProfilerServices, m_qmlPort); + << QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlProfilerServices, m_qmlPort); appRunner()->setEnvironment(environment()); appRunner()->setWorkingDirectory(workingDirectory()); diff --git a/src/plugins/qnx/qnxdebugsupport.cpp b/src/plugins/qnx/qnxdebugsupport.cpp index 79dfbee3a8d..856cdf12ee3 100644 --- a/src/plugins/qnx/qnxdebugsupport.cpp +++ b/src/plugins/qnx/qnxdebugsupport.cpp @@ -106,7 +106,7 @@ void QnxDebugSupport::startExecution() if (m_useQmlDebugger) m_runControl->startParameters().processArgs += - QmlDebug::qmlDebugCommandLineArguments(QmlDebug::QmlDebuggerServices, m_qmlPort); + QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlDebuggerServices, m_qmlPort); QStringList arguments; if (m_useCppDebugger) diff --git a/src/plugins/remotelinux/remotelinuxanalyzesupport.cpp b/src/plugins/remotelinux/remotelinuxanalyzesupport.cpp index 032eaec4a0c..ca894ef38b1 100644 --- a/src/plugins/remotelinux/remotelinuxanalyzesupport.cpp +++ b/src/plugins/remotelinux/remotelinuxanalyzesupport.cpp @@ -157,7 +157,7 @@ void RemoteLinuxAnalyzeSupport::startExecution() this, &RemoteLinuxAnalyzeSupport::handleAppRunnerError); const QStringList args = arguments() - << QmlDebug::qmlDebugCommandLineArguments(QmlDebug::QmlProfilerServices, d->qmlPort); + << QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlProfilerServices, d->qmlPort); runner->setWorkingDirectory(workingDirectory()); runner->setEnvironment(environment()); diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp index 33e0001ffac..9df21519bb1 100644 --- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp +++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp @@ -102,7 +102,7 @@ DebuggerStartParameters LinuxDeviceDebugSupport::startParameters(const AbstractR aspect->setUseMultiProcess(true); QStringList args = runConfig->arguments(); if (aspect->useQmlDebugger()) - args.prepend(QmlDebug::qmlDebugCommandLineArguments(QmlDebug::QmlDebuggerServices)); + args.prepend(QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlDebuggerServices)); params.processArgs = Utils::QtcProcess::joinArgs(args, Utils::OsTypeLinux); params.executable = runConfig->localExecutableFilePath(); @@ -166,8 +166,7 @@ void LinuxDeviceDebugSupport::startExecution() QString command; if (d->qmlDebugging) - args.prepend(QmlDebug::qmlDebugCommandLineArguments(QmlDebug::QmlDebuggerServices, - d->qmlPort)); + args.prepend(QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlDebuggerServices, d->qmlPort)); if (d->qmlDebugging && !d->cppDebugging) { command = remoteFilePath(); diff --git a/src/plugins/winrt/winrtdebugsupport.cpp b/src/plugins/winrt/winrtdebugsupport.cpp index 5f597d89df7..b6a518d5784 100644 --- a/src/plugins/winrt/winrtdebugsupport.cpp +++ b/src/plugins/winrt/winrtdebugsupport.cpp @@ -114,7 +114,7 @@ RunControl *WinRtDebugSupport::createDebugRunControl(WinRtRunConfiguration *runC if (!getFreePort(qmlDebugPort, errorMessage)) return 0; runConfig->setArguments(runConfig->arguments() + QLatin1Char(' ') - + QmlDebug::qmlDebugCommandLineArguments(QmlDebug::QmlDebuggerServices, qmlDebugPort)); + + QmlDebug::qmlDebugTcpArguments(QmlDebug::QmlDebuggerServices, qmlDebugPort)); params.qmlServerAddress = QHostAddress::LocalHost; params.qmlServerPort = qmlDebugPort; }