CtfVisualizer: Do not crash on unexpected types again

And print a nicer error message.

Amends c05f9cacc6

Task-number: QTCREATORBUG-29659
Change-Id: I1db6bea0bedf1fae034fecbbbeae56bb2fee49ed
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
Eike Ziller
2023-09-28 10:54:28 +02:00
parent 963ff4381d
commit 97518b3f6a
3 changed files with 59 additions and 41 deletions

View File

@@ -46,6 +46,7 @@ qint64 CtfTraceManager::traceEnd() const
void CtfTraceManager::addEvent(const json &event)
{
try {
const double timestamp = event.value(CtfTracingClockTimestampKey, -1.0);
if (timestamp < 0) {
// events without or with negative timestamp will be ignored
@@ -56,7 +57,8 @@ void CtfTraceManager::addEvent(const json &event)
m_timeOffset = timestamp;
}
static const auto getStringValue = [](const json &event, const char *key, const QString &def) {
static const auto getStringValue =
[](const json &event, const char *key, const QString &def) {
if (!event.contains(key))
return def;
const json val = event[key];
@@ -91,6 +93,10 @@ void CtfTraceManager::addEvent(const json &event)
// -> reset the time offset again:
m_timeOffset = -1.0;
}
} catch (...) {
m_errorString = Tr::tr("Error while parsing CTF data: %1.")
.arg("<pre>" + QString::fromStdString(event.dump()) + "</pre>");
}
}
void CtfTraceManager::finalize()
@@ -216,6 +222,7 @@ void CtfTraceManager::updateStatistics()
void CtfTraceManager::clearAll()
{
m_errorString.clear();
m_modelAggregator->clear();
for (CtfTimelineModel *model: std::as_const(m_threadModels)) {
model->deleteLater();
@@ -226,6 +233,10 @@ void CtfTraceManager::clearAll()
m_timeOffset = -1;
}
QString CtfTraceManager::errorString() const
{
return m_errorString;
}
} // namespace Internal
} // namespace CtfVisualizer

View File

@@ -46,6 +46,8 @@ public:
void updateStatistics();
void clearAll();
QString errorString() const;
signals:
void detailsRequested(const QString &title);
@@ -66,6 +68,7 @@ protected:
double m_traceEnd = std::numeric_limits<double>::min();
double m_timeOffset = -1.0;
QString m_errorString;
};
} // namespace Internal

View File

@@ -231,6 +231,10 @@ void CtfVisualizerTool::loadJson(const QString &fileName)
QMessageBox::warning(Core::ICore::dialogParent(),
Tr::tr("CTF Visualizer"),
Tr::tr("The file does not contain any trace data."));
} else if (!m_traceManager->errorString().isEmpty()) {
QMessageBox::warning(Core::ICore::dialogParent(),
Tr::tr("CTF Visualizer"),
m_traceManager->errorString());
} else {
m_traceManager->finalize();
m_perspective.select();