aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/tools/error.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/tools/error.cpp')
-rw-r--r--src/lib/corelib/tools/error.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/lib/corelib/tools/error.cpp b/src/lib/corelib/tools/error.cpp
index 2ff36d1d1..f1b90b71e 100644
--- a/src/lib/corelib/tools/error.cpp
+++ b/src/lib/corelib/tools/error.cpp
@@ -40,7 +40,6 @@
#include "error.h"
#include "persistence.h"
-#include "qttools.h"
#include "stringconstants.h"
#include "setupprojectparameters.h"
#include "logging/logger.h"
@@ -209,15 +208,21 @@ ErrorInfo::ErrorInfo(const QString &description, const QStringList &backtrace)
{
append(description);
for (const QString &traceLine : backtrace) {
- static const std::regex regexp("^(.+) at (.+):(\\-?[0-9]+)$");
+ if (traceLine.contains(QStringLiteral("<eval>")))
+ continue;
+ static const std::regex regexpWithFunc("^(.+) at [^(]*\\((.+):(\\-?[0-9]+)\\)$");
+ static const std::regex regexpWithoutFunc("^(.+) at (.+):(\\-?[0-9]+)$");
std::smatch match;
const std::string tl = traceLine.toStdString();
- if (std::regex_match(tl, match, regexp)) {
- const QString message = QString::fromStdString(match[1]),
- file = QString::fromStdString(match[2]),
- line = QString::fromStdString(match[3]);
+ bool hasMatch = std::regex_match(tl, match, regexpWithFunc);
+ if (!hasMatch)
+ hasMatch = std::regex_match(tl, match, regexpWithoutFunc);
+ if (hasMatch) {
+ const QString message = QString::fromStdString(match[1]).trimmed();
+ const QString file = QString::fromStdString(match[2]);
+ const QString line = QString::fromStdString(match[3]);
const CodeLocation location(file, line.toInt());
- appendBacktrace(message, location);
+ appendBacktrace(message, CodeLocation(file, line.toInt()));
}
}
}
@@ -271,7 +276,7 @@ void ErrorInfo::clear()
QString ErrorInfo::toString() const
{
QStringList lines;
- for (const ErrorItem &e : qAsConst(d->items)) {
+ for (const ErrorItem &e : std::as_const(d->items)) {
if (e.isBacktraceItem()) {
QString line;
if (!e.description().isEmpty())
@@ -312,6 +317,13 @@ bool ErrorInfo::hasLocation() const
return ei.codeLocation().isValid(); });
}
+bool ErrorInfo::isCancelException() const
+{
+ return Internal::any_of(d->items, [](const ErrorItem &ei) {
+ return ei.description() == QLatin1String("interrupted");
+ });
+}
+
void ErrorInfo::load(Internal::PersistentPool &pool)
{
pool.load(*d);