Android: Use QRegularExpression for parsing logcat output

Task-number: QTCREATORBUG-24098
Change-Id: I3df81c06611f1547b9424e31ea1b4a4541573946
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2020-06-10 12:37:58 +02:00
parent 4fbd68183b
commit 26121da90c
2 changed files with 19 additions and 20 deletions

View File

@@ -54,6 +54,7 @@
#include <QFileInfo> #include <QFileInfo>
#include <QLoggingCategory> #include <QLoggingCategory>
#include <QScopeGuard> #include <QScopeGuard>
#include <QRegularExpression>
#include <QTcpServer> #include <QTcpServer>
#include <QThread> #include <QThread>
@@ -77,7 +78,7 @@ static const QString pidScriptPreNougat = QStringLiteral("for p in /proc/[0-9]*;
"do cat <$p/cmdline && echo :${p##*/}; done"); "do cat <$p/cmdline && echo :${p##*/}; done");
static const QString pidPollingScript = QStringLiteral("while [ -d /proc/%1 ]; do sleep 1; done"); static const QString pidPollingScript = QStringLiteral("while [ -d /proc/%1 ]; do sleep 1; done");
static const QString regExpLogcat = QStringLiteral("[0-9\\-]*" // date static const QRegularExpression regExpLogcat{"^[0-9\\-]*" // date
"\\s+" "\\s+"
"[0-9\\-:.]*"// time "[0-9\\-:.]*"// time
"\\s*" "\\s*"
@@ -89,8 +90,7 @@ static const QString regExpLogcat = QStringLiteral("[0-9\\-]*" // date
"\\s+" "\\s+"
"(.*): " // source 3. capture "(.*): " // source 3. capture
"(.*)" // message 4. capture "(.*)" // message 4. capture
"[\\n\\r]*" "[\\n\\r]*$"};
);
static int APP_START_TIMEOUT = 45000; static int APP_START_TIMEOUT = 45000;
static bool isTimedOut(const chrono::high_resolution_clock::time_point &start, 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_packageName(packageName)
, m_adbLogcatProcess(nullptr, deleter) , m_adbLogcatProcess(nullptr, deleter)
, m_psIsAlive(nullptr, deleter) , m_psIsAlive(nullptr, deleter)
, m_logCatRegExp(regExpLogcat)
, m_debugServerProcess(nullptr, deleter) , m_debugServerProcess(nullptr, deleter)
, m_jdbProcess(nullptr, deleter) , m_jdbProcess(nullptr, deleter)
@@ -457,11 +456,12 @@ void AndroidRunnerWorker::logcatProcess(const QByteArray &text, QByteArray &buff
break; break;
} }
} }
if (m_logCatRegExp.exactMatch(line)) { const QRegularExpressionMatch match = regExpLogcat.match(line);
if (match.hasMatch()) {
// Android M // Android M
if (m_logCatRegExp.cap(1) == pidString) { if (match.captured(1) == pidString) {
const QString &messagetype = m_logCatRegExp.cap(2); const QString messagetype = match.captured(2);
QString output = line.mid(m_logCatRegExp.pos(2)); const QString output = line.mid(match.capturedStart(2));
if (onlyError if (onlyError
|| messagetype == QLatin1String("F") || messagetype == QLatin1String("F")

View File

@@ -97,7 +97,6 @@ private:
std::unique_ptr<QProcess, Deleter> m_psIsAlive; std::unique_ptr<QProcess, Deleter> m_psIsAlive;
QByteArray m_stdoutBuffer; QByteArray m_stdoutBuffer;
QByteArray m_stderrBuffer; QByteArray m_stderrBuffer;
QRegExp m_logCatRegExp;
QFuture<qint64> m_pidFinder; QFuture<qint64> m_pidFinder;
bool m_useCppDebugger = false; bool m_useCppDebugger = false;
bool m_useLldb = false; // FIXME: Un-implemented currently. bool m_useLldb = false; // FIXME: Un-implemented currently.