diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 0e2bf0f9c11b053c9fda9ee491c8e3d9ba236f25..13cd1c8cfc562cac1e37cc52cd09f0db1e9a0672 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -110,7 +110,8 @@ DebuggerStartParameters::DebuggerStartParameters() useTerminal(false), breakAtMain(false), toolChainType(ToolChain::UNKNOWN), - startMode(NoStartMode) + startMode(NoStartMode), + executableUid(0) {} void DebuggerStartParameters::clear() diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index d3ea88511275c836be8d48aa0a3c7cebdfca84b1..a4c0a7c3e5aa5394355cf710e0b40643f19169aa 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -99,6 +99,9 @@ public: QString dumperLibrary; QStringList dumperLibraryLocations; DebuggerStartMode startMode; + + // for SymbianOS debugging + quint32 executableUid; }; DEBUGGER_EXPORT QDebug operator<<(QDebug str, const DebuggerStartParameters &); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp index 824c883407e37fc7336f1394727c89d37e1fea47..649a2feec3164ce351f01a9dedee709ea69b273f 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp @@ -252,6 +252,27 @@ QString S60DeployConfiguration::localExecutableFileName() const return QDir::toNativeSeparators(localExecutable); } +quint32 S60DeployConfiguration::executableUid() const +{ + quint32 uid = 0; + QString executablePath(localExecutableFileName()); + if (!executablePath.isEmpty()) { + QFile file(executablePath); + if (file.open(QIODevice::ReadOnly)) { + // executable's UID is 4 bytes starting at 8. + const QByteArray data = file.read(12); + if (data.size() == 12) { + const unsigned char *d = reinterpret_cast<const unsigned char*>(data.data() + 8); + uid = *d++; + uid += *d++ << 8; + uid += *d++ << 16; + uid += *d++ << 24; + } + } + } + return uid; +} + bool S60DeployConfiguration::runSmartInstaller() const { DeployConfiguration *dc = target()->activeDeployConfiguration(); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h index 1885cbe38d59c97b45ccb1c6fe234987a475d1d5..b109ba8e7e6ba32cf1910bd6aed0dea92c6df575 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h @@ -77,6 +77,7 @@ public: QStringList packageTemplateFileNames() const; QString appPackageTemplateFileName() const; QString localExecutableFileName() const; + quint32 executableUid() const; QVariantMap toMap() const; diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp index bf268838da7803823a5ab58bf3061d36a941801c..5060d799762ebdc3324856e7698e70a2d7a0e2ee 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp @@ -593,6 +593,9 @@ S60DeviceDebugRunControl::S60DeviceDebugRunControl(S60DeviceRunConfiguration *rc m_startParams->startMode = Debugger::StartInternal; m_startParams->toolChainType = rc->toolChainType(); m_startParams->executable = debugFileName; + m_startParams->executableUid = activeDeployConf->executableUid(); + + QTC_ASSERT(m_startParams->executableUid, return); // Prefer the '*.sym' file over the '.exe', which should exist at the same // location in debug builds