aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/ios/iostoolhandler.cpp
diff options
context:
space:
mode:
authorFawzi Mohamed <[email protected]>2013-10-10 15:15:49 +0200
committerhjk <[email protected]>2013-10-29 14:03:58 +0100
commitc162ba1391674fe942ff7449a81a64ecfc31e421 (patch)
tree2405502654e8dc5a74d62cfc429f9fa6392e377a /src/plugins/ios/iostoolhandler.cpp
parentdc5ba1127dc67c848a8be46b4b42a3d0d5e99851 (diff)
ios simulator debugging
Diffstat (limited to 'src/plugins/ios/iostoolhandler.cpp')
-rw-r--r--src/plugins/ios/iostoolhandler.cpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/plugins/ios/iostoolhandler.cpp b/src/plugins/ios/iostoolhandler.cpp
index d6e455b9fc1..17edb913e3b 100644
--- a/src/plugins/ios/iostoolhandler.cpp
+++ b/src/plugins/ios/iostoolhandler.cpp
@@ -41,6 +41,7 @@
#include <QCoreApplication>
#include <QList>
#include <QScopedArrayPointer>
+#include <QProcessEnvironment>
#if defined(Q_OS_UNIX)
#include <sys/types.h>
@@ -65,6 +66,7 @@ class MyProcess: public QProcess
Q_OBJECT
public:
explicit MyProcess(QObject *parent = 0);
+ ~MyProcess();
int processOutputSocket();
QSocketNotifier *notifier();
protected:
@@ -224,10 +226,15 @@ MyProcess::MyProcess(QObject *parent) : QProcess(parent)
if (socketpair(PF_UNIX, SOCK_STREAM, 0, &m_sockets[0]) == -1) {
qDebug() << "IosToolHandler socketpair failed ";
}
- shutdown(m_sockets[0], SHUT_WR);
m_notifier = new QSocketNotifier(m_sockets[0], QSocketNotifier::Read, this);
}
+MyProcess::~MyProcess()
+{
+ ::close(m_sockets[0]);
+ ::close(m_sockets[1]);
+}
+
int MyProcess::processOutputSocket()
{
return m_sockets[0];
@@ -245,7 +252,6 @@ void MyProcess::setupChildProcess()
emit finished(-1, QProcess::CrashExit);
exit(-1);
}
- shutdown(1, SHUT_RD); // leave open for handshake when transferring fd?
}
#else
MyProcess::MyProcess(QObject *parent) : QProcess(parent)
@@ -272,6 +278,11 @@ IosToolHandlerPrivate::IosToolHandlerPrivate(IosToolHandler::DeviceType devType,
q(q), state(NonStarted), devType(devType), buffer(4*lookaheadSize, 0), iBegin(0), iEnd(0),
gdbSocket(-1)
{
+ QProcessEnvironment env(QProcessEnvironment::systemEnvironment());
+ foreach (const QString &k, env.keys())
+ if (k.startsWith(QLatin1String("DYLD_")))
+ env.remove(k);
+ process.setProcessEnvironment(env);
QObject::connect(process.notifier(), SIGNAL(activated(int)), q, SLOT(subprocessHasData(int)));
QObject::connect(&process, SIGNAL(finished(int,QProcess::ExitStatus)),
q, SLOT(subprocessFinished(int,QProcess::ExitStatus)));
@@ -498,6 +509,8 @@ int recv_fd(int socket)
if ( (control_message->cmsg_level == SOL_SOCKET) &&
(control_message->cmsg_type == SCM_RIGHTS) ) {
sent_fd = *((int *) CMSG_DATA(control_message));
+ // aknowledge fd
+ send(socket, "x", 1, 0);
return sent_fd;
}
}
@@ -777,7 +790,7 @@ void IosToolHandlerPrivate::subprocessHasData(int socket)
currentData = buffer.mid(0, lastXmlSize); // remove this??
}
qptrdiff toRead = lookaheadSize - (iEnd - spacerStart);
- qptrdiff reallyRead = recv(socket, buffer.data() + iBegin, toRead, 0);
+ qptrdiff reallyRead = recv(socket, buffer.data() + iEnd, toRead, 0);
if (reallyRead == 0) { // eof
stop();
return;
@@ -799,14 +812,19 @@ void IosToolHandlerPrivate::subprocessHasData(int socket)
iEnd += reallyRead;
if (reallyRead != toRead)
continue;
- if (spacerStart < iEnd && buffer.at(spacerStart) != 'n') {
+ if (spacerStart < iEnd && buffer.at(spacerStart) != 'N') {
++spacerStart;
- while (spacerStart < iEnd && buffer.at(spacerStart) != 'n')
+ while (spacerStart < iEnd && buffer.at(spacerStart) != 'N')
++spacerStart;
continue;
}
}
+ if (buffer.at(iEnd-1) != 'd') {
+ qDebug() << "IosToolHandler: bad alignment of spacer: " << buffer.mid(iBegin, iEnd - iBegin);
+ return;
+ }
gdbSocket = recv_fd(socket);
+ qDebug() << "IosToolHandler: receivedSocket";
gotGdbserverSocket(bundlePath, deviceId, gdbSocket);
stop();
return;