summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-09-01 16:06:29 +0200
committerhjk <hjk121@nokiamail.com>2014-09-02 15:31:36 +0200
commite8305e3ed2349b95c7311c296febc6d75f1a0c2a (patch)
tree889c654ff6165c518eb87cdd742d87f11a13e335
parent2a6491233c7b4d967f00807336cdcfa97c342c6e (diff)
downloadqt-creator-e8305e3ed2349b95c7311c296febc6d75f1a0c2a.tar.gz
RemoteLinux: Fix mixed debugging.
The QML part was broken due to recent changes relating to gdbserver "multi" mode. Task-number: QTCREATORBUG-12928 Change-Id: Ia806f0cbfedd6961138f7cd89a0387bd851ff83e Reviewed-by: Robert Loehning <robert.loehning@digia.com> Reviewed-by: hjk <hjk121@nokiamail.com>
-rw-r--r--src/plugins/debugger/gdb/remotegdbserveradapter.cpp32
-rw-r--r--src/plugins/remotelinux/remotelinuxdebugsupport.cpp11
2 files changed, 25 insertions, 18 deletions
diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
index ca6e95771d..8d90c6c104 100644
--- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
+++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp
@@ -480,21 +480,27 @@ void GdbRemoteServerEngine::notifyEngineRemoteSetupDone(int gdbServerPort, int q
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
DebuggerEngine::notifyEngineRemoteSetupDone(gdbServerPort, qmlPort);
- if (m_isMulti) {
- // Has been done in notifyEngineRemoteServerRunning
- } else {
- if (qmlPort != -1)
- startParameters().qmlServerPort = qmlPort;
- if (gdbServerPort != -1) {
- QString &rc = startParameters().remoteChannel;
- const int sepIndex = rc.lastIndexOf(QLatin1Char(':'));
- if (sepIndex != -1) {
- rc.replace(sepIndex + 1, rc.count() - sepIndex - 1,
- QString::number(gdbServerPort));
- }
+ DebuggerStartParameters &params = isMasterEngine()
+ ? startParameters() : masterEngine()->startParameters();
+ if (gdbServerPort != -1) {
+ QString &rc = params.remoteChannel;
+ const int sepIndex = rc.lastIndexOf(QLatin1Char(':'));
+ if (sepIndex != -1) {
+ rc.replace(sepIndex + 1, rc.count() - sepIndex - 1,
+ QString::number(gdbServerPort));
}
- startGdb();
}
+ if (qmlPort != -1) {
+ params.qmlServerPort = qmlPort;
+ params.processArgs.replace(_("%qml_port%"), QString::number(qmlPort));
+ }
+
+ // TODO: Aren't these redundant?
+ m_isMulti = params.multiProcess;
+ m_targetPid = -1;
+ m_serverChannel = params.remoteChannel.toLatin1();
+
+ startGdb();
}
void GdbRemoteServerEngine::notifyEngineRemoteSetupFailed(const QString &reason)
diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
index 58cd4e5c13..e6ecb1de65 100644
--- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
+++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp
@@ -42,6 +42,7 @@
#include <projectexplorer/devicesupport/deviceapplicationrunner.h>
#include <utils/qtcassert.h>
+#include <utils/qtcprocess.h>
#include <QPointer>
@@ -60,7 +61,6 @@ public:
: engine(engine),
qmlDebugging(runConfig->extraAspect<Debugger::DebuggerRunConfigurationAspect>()->useQmlDebugger()),
cppDebugging(runConfig->extraAspect<Debugger::DebuggerRunConfigurationAspect>()->useCppDebugger()),
- target(DeviceKitInformation::device(runConfig->target()->kit())->sshParameters().host.toLatin1()),
gdbServerPort(-1), qmlPort(-1)
{
}
@@ -69,7 +69,6 @@ public:
bool qmlDebugging;
bool cppDebugging;
QByteArray gdbserverOutput;
- QByteArray target;
int gdbServerPort;
int qmlPort;
};
@@ -99,8 +98,12 @@ DebuggerStartParameters LinuxDeviceDebugSupport::startParameters(const AbstractR
params.qmlServerPort = 0; // port is selected later on
}
if (aspect->useCppDebugger()) {
+ params.multiProcess = true;
params.languages |= CppLanguage;
- params.processArgs = runConfig->arguments().join(QLatin1String(" "));
+ QStringList args = runConfig->arguments();
+ if (aspect->useQmlDebugger())
+ args.prepend(QString::fromLatin1("-qmljsdebugger=port:%qml_port%,block"));
+ params.processArgs = Utils::QtcProcess::joinArgs(args, Utils::OsTypeLinux);
params.startMode = AttachToRemoteServer;
params.executable = runConfig->localExecutableFilePath();
params.remoteChannel = device->sshParameters().host + QLatin1String(":-1");
@@ -265,8 +268,6 @@ void LinuxDeviceDebugSupport::handleAdapterSetupFailed(const QString &error)
void LinuxDeviceDebugSupport::handleAdapterSetupDone()
{
AbstractRemoteLinuxRunSupport::handleAdapterSetupDone();
- QByteArray remote = d->target + ':' + QByteArray::number(d->gdbServerPort);
- d->engine->notifyEngineRemoteServerRunning(remote, -1);
d->engine->notifyEngineRemoteSetupDone(d->gdbServerPort, d->qmlPort);
}