From 26121da90cbf1f0555cd708fa39d3e8e46d357e1 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 10 Jun 2020 12:37:58 +0200 Subject: [PATCH] Android: Use QRegularExpression for parsing logcat output Task-number: QTCREATORBUG-24098 Change-Id: I3df81c06611f1547b9424e31ea1b4a4541573946 Reviewed-by: Christian Stenger --- src/plugins/android/androidrunnerworker.cpp | 38 ++++++++++----------- src/plugins/android/androidrunnerworker.h | 1 - 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index 1b026bc6154..0e6227ac5f1 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include @@ -77,20 +78,19 @@ static const QString pidScriptPreNougat = QStringLiteral("for p in /proc/[0-9]*; "do cat <$p/cmdline && echo :${p##*/}; done"); static const QString pidPollingScript = QStringLiteral("while [ -d /proc/%1 ]; do sleep 1; done"); -static const QString regExpLogcat = QStringLiteral("[0-9\\-]*" // date - "\\s+" - "[0-9\\-:.]*"// time - "\\s*" - "(\\d*)" // pid 1. capture - "\\s+" - "\\d*" // unknown - "\\s+" - "(\\w)" // message type 2. capture - "\\s+" - "(.*): " // source 3. capture - "(.*)" // message 4. capture - "[\\n\\r]*" - ); +static const QRegularExpression regExpLogcat{"^[0-9\\-]*" // date + "\\s+" + "[0-9\\-:.]*"// time + "\\s*" + "(\\d*)" // pid 1. capture + "\\s+" + "\\d*" // unknown + "\\s+" + "(\\w)" // message type 2. capture + "\\s+" + "(.*): " // source 3. capture + "(.*)" // message 4. capture + "[\\n\\r]*$"}; static int APP_START_TIMEOUT = 45000; static bool isTimedOut(const chrono::high_resolution_clock::time_point &start, @@ -242,7 +242,6 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa : m_packageName(packageName) , m_adbLogcatProcess(nullptr, deleter) , m_psIsAlive(nullptr, deleter) - , m_logCatRegExp(regExpLogcat) , m_debugServerProcess(nullptr, deleter) , m_jdbProcess(nullptr, deleter) @@ -457,11 +456,12 @@ void AndroidRunnerWorker::logcatProcess(const QByteArray &text, QByteArray &buff break; } } - if (m_logCatRegExp.exactMatch(line)) { + const QRegularExpressionMatch match = regExpLogcat.match(line); + if (match.hasMatch()) { // Android M - if (m_logCatRegExp.cap(1) == pidString) { - const QString &messagetype = m_logCatRegExp.cap(2); - QString output = line.mid(m_logCatRegExp.pos(2)); + if (match.captured(1) == pidString) { + const QString messagetype = match.captured(2); + const QString output = line.mid(match.capturedStart(2)); if (onlyError || messagetype == QLatin1String("F") diff --git a/src/plugins/android/androidrunnerworker.h b/src/plugins/android/androidrunnerworker.h index f889e9e90d6..496e0eceeab 100644 --- a/src/plugins/android/androidrunnerworker.h +++ b/src/plugins/android/androidrunnerworker.h @@ -97,7 +97,6 @@ private: std::unique_ptr m_psIsAlive; QByteArray m_stdoutBuffer; QByteArray m_stderrBuffer; - QRegExp m_logCatRegExp; QFuture m_pidFinder; bool m_useCppDebugger = false; bool m_useLldb = false; // FIXME: Un-implemented currently.