Android: Avoid code duplication in startDebuggerServer()

Change-Id: I5ea1c620bf5ef83615d5649fc80fe6863e7a7755
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Jarek Kobus
2024-08-09 14:34:12 +02:00
parent af422eadbf
commit 9b5fe259c3

View File

@@ -504,50 +504,38 @@ void AndroidRunnerWorker::startNativeDebugging()
void AndroidRunnerWorker::startDebuggerServer(const QString &packageDir, void AndroidRunnerWorker::startDebuggerServer(const QString &packageDir,
const QString &debugServerFile) const QString &debugServerFile)
{ {
const QString gdbServerSocket = packageDir + "/debug-socket";
QStringList adbArgs = {"shell", "run-as", m_packageName}; QStringList adbArgs = {"shell", "run-as", m_packageName};
if (m_processUser > 0) if (m_processUser > 0)
adbArgs << "--user" << QString::number(m_processUser); adbArgs << "--user" << QString::number(m_processUser);
if (m_useLldb) {
QString lldbServerErr;
QStringList lldbServerArgs = selector();
lldbServerArgs += adbArgs;
lldbServerArgs << debugServerFile
<< "platform"
// << "--server" // Can lead to zombie servers
<< "--listen" << QString("*:%1").arg(s_localDebugServerPort.toString());
m_debugServerProcess.reset(AndroidManager::startAdbProcess(lldbServerArgs, &lldbServerErr));
if (!m_debugServerProcess) { if (!m_useLldb)
qCDebug(androidRunWorkerLog) << "Debugger process failed to start" << lldbServerErr;
emit remoteProcessFinished(Tr::tr("Failed to start debugger server."));
return;
}
qCDebug(androidRunWorkerLog) << "Debugger process started";
m_debugServerProcess->setObjectName("AndroidDebugServerProcess");
} else {
QString gdbServerSocket = packageDir + "/debug-socket";
runAdb(adbArgs + QStringList({"rm", gdbServerSocket})); runAdb(adbArgs + QStringList({"rm", gdbServerSocket}));
QString gdbProcessErr; QStringList serverArgs = selector() + adbArgs + QStringList{debugServerFile};
QStringList gdbServerErr = selector();
gdbServerErr += adbArgs;
gdbServerErr << debugServerFile
<< "--multi" << "+" + gdbServerSocket;
m_debugServerProcess.reset(AndroidManager::startAdbProcess(gdbServerErr, &gdbProcessErr));
if (m_useLldb)
serverArgs += QStringList{"platform", "--listen", "*:" + s_localDebugServerPort.toString()};
else
serverArgs += QStringList{"--multi", "+" + gdbServerSocket};
QString serverError;
m_debugServerProcess.reset(AndroidManager::startAdbProcess(serverArgs, &serverError));
if (!m_debugServerProcess) { if (!m_debugServerProcess) {
qCDebug(androidRunWorkerLog) << "Debugger process failed to start" << gdbServerErr; qCDebug(androidRunWorkerLog) << "Debugger process failed to start" << serverError;
emit remoteProcessFinished(Tr::tr("Failed to start debugger server.")); emit remoteProcessFinished(Tr::tr("Failed to start debugger server."));
return; return;
} }
qCDebug(androidRunWorkerLog) << "Debugger process started"; qCDebug(androidRunWorkerLog) << "Debugger process started";
m_debugServerProcess->setObjectName("AndroidDebugServerProcess"); m_debugServerProcess->setObjectName("AndroidDebugServerProcess");
if (m_useLldb)
return;
removeForwardPort("tcp:" + s_localDebugServerPort.toString(), removeForwardPort("tcp:" + s_localDebugServerPort.toString(),
"localfilesystem:" + gdbServerSocket, "C++"); "localfilesystem:" + gdbServerSocket, "C++");
} }
}
ExecutableItem AndroidRunnerWorker::removeForwardPortRecipe( ExecutableItem AndroidRunnerWorker::removeForwardPortRecipe(
const QString &port, const QString &adbArg, const QString &portType) const QString &port, const QString &adbArg, const QString &portType)