STEPS TO REPRODUCE 1. Load a profile 2. Select the consumed tab 3. Select a range in the graph 4. Right click -> filter in range OBSERVED RESULT ASSERT failure in QVector<T>::at: "index out of range", file /usr/include/qt5/QtCore/qvector.h, line 449 (gdb) bt #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007ffff06d9ea5 in __GI_abort () at abort.c:79 #2 0x00007ffff145d137 in qt_message_output(QtMsgType, QMessageLogContext const&, QString const&) [clone .cold.117] () at /lib64/libQt5Core.so.5 #3 0x00007ffff145c569 in qgetenv(char const*) [clone .cold.76] () at /lib64/libQt5Core.so.5 #4 0x000000000045b857 in QVector<QBrush>::at(int) const (this=0xd6db40, i=-1) at /usr/include/qt5/QtCore/qvector.h:449 #5 0x000000000046d74d in ChartModel::headerData(int, Qt::Orientation, int) const (this=0xd6db00, section=-1, orientation=Qt::Horizontal, role=175763350) at /home/tpetrov/projects/temp/heaptrack/src/analyze/gui/chartmodel.cpp:69 #6 0x00007ffff161bca6 in QAbstractProxyModel::headerData(int, Qt::Orientation, int) const () at /lib64/libQt5Core.so.5 #7 0x00007ffff162e6a3 in QSortFilterProxyModel::headerData(int, Qt::Orientation, int) const () at /lib64/libQt5Core.so.5 #8 0x00007ffff765e9c0 in KChart::AttributesModel::headerData(int, Qt::Orientation, int) const () at /lib64/libKChart.so.2 #9 0x00007ffff7654b61 in KChart::AbstractDiagram::Private::datasetAttrs(int, int) const () at /lib64/libKChart.so.2 #10 0x00007ffff7648f38 in KChart::AbstractDiagram::brush(int) const () at /lib64/libKChart.so.2 #11 0x00007ffff764d50a in KChart::AbstractDiagram::datasetBrushes() const () at /lib64/libKChart.so.2 #12 0x00007ffff7676504 in KChart::Legend::Private::fetchPaintOptions(KChart::Legend*) () at /lib64/libKChart.so.2 #13 0x00007ffff767722d in KChart::Legend::buildLegend() () at /lib64/libKChart.so.2 #14 0x00007ffff7677c2d in KChart::Legend::setNeedRebuild() () at /lib64/libKChart.so.2 #15 0x00007ffff762d005 in KChart::Legend::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () at /lib64/libKChart.so.2 #16 0x00007ffff1683b00 in void doActivate<false>(QObject*, int, void**) () at /lib64/libQt5Core.so.5 #17 0x00007ffff762ad36 in KChart::DiagramObserver::diagramDataChanged(KChart::AbstractDiagram*) () at /lib64/libKChart.so.2 #18 0x00007ffff1683b00 in void doActivate<false>(QObject*, int, void**) () at /lib64/libQt5Core.so.5 #19 0x00007ffff16018f1 in QAbstractItemModel::modelReset(QAbstractItemModel::QPrivateSignal) () at /lib64/libQt5Core.so.5 #20 0x00007ffff1629ae6 in QSortFilterProxyModelPrivate::_q_sourceReset() () at /lib64/libQt5Core.so.5 #21 0x00007ffff162dcc1 in QSortFilterProxyModel::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () at /lib64/libQt5Core.so.5 #22 0x00007ffff1683b00 in void doActivate<false>(QObject*, int, void**) () at /lib64/libQt5Core.so.5 #23 0x00007ffff16018f1 in QAbstractItemModel::modelReset(QAbstractItemModel::QPrivateSignal) () at /lib64/libQt5Core.so.5 #24 0x000000000046e6dc in ChartModel::resetData(ChartData const&) (this=0xd6db00, data=...) at /home/tpetrov/projects/temp/heaptrack/src/analyze/gui/chartmodel.cpp:261 #25 0x00000000004304bd in (anonymous namespace)::<lambda(const ChartData&)>::operator()(const ChartData &) const (__closure=0xdc9330, data=...) at /home/tpetrov/projects/temp/heaptrack/src/analyze/gui/mainwindow.cpp:223 #26 0x000000000043ae66 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<const ChartData&>, void, (anonymous namespace)::addChartTab(QTabWidget*, const QString&, ChartModel::Type, const Parser*, void (Parser::*)(const ChartData&), MainWindow*)::<lambda(const ChartData&)> >::call((anonymous namespace)::<lambda(const ChartData&)> &, void **) (f=..., arg=0x7fff61790788) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:146 #27 0x000000000043a73e in QtPrivate::Functor<(anonymous namespace)::addChartTab(QTabWidget*, const QString&, ChartModel::Type, const Parser*, void (Parser::*)(const ChartData&), MainWindow*)::<lambda(const ChartData&)>, 1>::call<QtPrivate::List<ChartData const&>, void>((anonymous namespace)::<lambda(const ChartData&)> &, void *, void **) (f=..., arg=0x7fff61790788) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:256 #28 0x00000000004398ca in QtPrivate::QFunctorSlotObject<(anonymous namespace)::addChartTab(QTabWidget*, const QString&, ChartModel::Type, const Parser*, void (Parser::*)(const ChartData&), MainWindow*)::<lambda(const ChartData&)>, 1, QtPrivate::List<const ChartData&>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=1, this_=0xdc9320, r=0x8e5ac0, a=0x7fff61790788, ret=0x0) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:443 #29 0x00007ffff167cee3 in QObject::event(QEvent*) () at /lib64/libQt5Core.so.5 #30 0x00007ffff252623b in QWidget::event(QEvent*) () at /lib64/libQt5Widgets.so.5 #31 0x00007ffff24e5252 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5 #32 0x00007ffff24ebfd0 in QApplication::notify(QObject*, QEvent*) () at /lib64/libQt5Widgets.so.5 #33 0x00007ffff16505b2 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt5Core.so.5 #34 0x00007ffff16533a1 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /lib64/libQt5Core.so.5 #35 0x00007ffff16a4ba7 in postEventSourceDispatch(_GSource*, int (*)(void*), void*) () at /lib64/libQt5Core.so.5 #36 0x00007fffe9bd8aed in g_main_context_dispatch () at /lib64/libglib-2.0.so.0 #37 0x00007fffe9bd8ea8 in g_main_context_iterate.isra () at /lib64/libglib-2.0.so.0 #38 0x00007fffe9bd8f40 in g_main_context_iteration () at /lib64/libglib-2.0.so.0 #39 0x00007ffff16a4954 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5Core.so.5 #40 0x00007ffff164f2bb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt5Core.so.5 #41 0x00007ffff1657704 in QCoreApplication::exec() () at /lib64/libQt5Core.so.5 #42 0x000000000042d90b in main(int, char**) (argc=2, argv=0x7fffffffd378) at /home/tpetrov/projects/temp/heaptrack/src/analyze/gui/gui.cpp:147 SOFTWARE/OS VERSIONS Linux: Rocky Linux 8.8 KDE Frameworks Version: 5.96.0 Qt Version: 5.15.3 kdiagram version: 2.8.0-4
can you please share the heaptrack file that triggers this behavior with me?
Nope, I cannot unfortunately. I'll see if I can reproduce with something that is shareable.
You can also try to use tools/anonymize - though it seems to expect a gz input file and output file - but doing what that does for a zstd heaptrack file should be trivial, just replace the strings
Created attachment 161175 [details] File for nautilus It doesn't happen immediately with this file. Steps: 1. open it 2. select a tab which contain a graph 3. select a region 4. right click -> filter in on selection 5. repeat 3 while it crashes I sometimes need to do 3 iterations of the steps 3-5 to get a crash. Probably something related with the size of the region and its content.
Are you able to reproduce using the file I've uploaded? This issue is making it hard to inspect the logs and with another file I can hit the problem 100% of the time. :(
Git commit 6e558868fa9555fd8f75e6520cbbde628c7d424a by Milian Wolff. Committed on 04/09/2023 at 16:44. Pushed by mwolff into branch 'master'. Make ChartModel::headerData more resilient to prevent crashes Return when we get asked for invalid data which seems to happen through the KDChart attributes model. Fixes assertions/crashes like: ``` #0 0x00007fdcfc88e83c in () at /usr/lib/libc.so.6 #1 0x00007fdcfc83e668 in raise () at /usr/lib/libc.so.6 #2 0x00007fdcfc8264b8 in abort () at /usr/lib/libc.so.6 #3 0x00007fdcfd8a0098 in qt_assert(char const*, char const*, int) () at /usr/lib/libQt5Core.so.5 #4 0x00007fdcfd8a0157 in () at /usr/lib/libQt5Core.so.5 #5 0x00005649da68cf3f in QVector<QBrush>::at(int) const (this=0x6070001170a0, i=-1) at /usr/include/qt/QtCore/qvector.h:449 #6 0x00005649da70272e in ChartModel::headerData(int, Qt::Orientation, int) const (this=0x607000117060, section=-1, orientation=Qt::Horizontal, role=175763350) at /home/milian/projects/src/heaptrack/src/analyze/gui/chartmodel.cpp:69 #7 0x00007fdcfda67f5e in QAbstractProxyModel::headerData(int, Qt::Orientation, int) const () at /usr/lib/libQt5Core.so.5 #8 0x00007fdcfda7ba54 in QSortFilterProxyModel::headerData(int, Qt::Orientation, int) const () at /usr/lib/libQt5Core.so.5 #9 0x00007fdcff9b6dbf in KChart::AttributesModel::headerData(int, Qt::Orientation, int) const () at /usr/lib/libKChart.so.2 #10 0x00007fdcff9af76a in () at /usr/lib/libKChart.so.2 #11 0x00007fdcff9a7605 in KChart::AbstractDiagram::brush(int) const () at /usr/lib/libKChart.so.2 #12 0x00007fdcff9ac495 in KChart::AbstractDiagram::datasetBrushes() const () at /usr/lib/libKChart.so.2 #13 0x00007fdcff9ccd77 in () at /usr/lib/libKChart.so.2 #14 0x00007fdcff9cda4b in KChart::Legend::buildLegend() () at /usr/lib/libKChart.so.2 #15 0x00007fdcff9ce4ba in KChart::Legend::setNeedRebuild() () at /usr/lib/libKChart.so.2 #16 0x00007fdcfdad17f3 in () at /usr/lib/libQt5Core.so.5 #17 0x00007fdcff98c4f3 in KChart::DiagramObserver::diagramDataChanged(KChart::AbstractDiagram*) () at /usr/lib/libKChart.so.2 #18 0x00007fdcfdad17f3 in () at /usr/lib/libQt5Core.so.5 #19 0x00007fdcfda59182 in QAbstractItemModel::modelReset(QAbstractItemModel::QPrivateSignal) () at /usr/lib/libQt5Core.so.5 #20 0x00007fdcfda8506d in () at /usr/lib/libQt5Core.so.5 #21 0x00007fdcfdad17f3 in () at /usr/lib/libQt5Core.so.5 #22 0x00007fdcfda59182 in QAbstractItemModel::modelReset(QAbstractItemModel::QPrivateSignal) () at /usr/lib/libQt5Core.so.5 #23 0x00005649da708068 in ChartModel::resetData(ChartData const&) (this=0x607000117060, data=...) at /home/milian/projects/src/heaptrack/src/analyze/gui/chartmodel.cpp:261 #24 0x00005649da569a5d in operator()(ChartData const&) const (__closure=0x604000258e20, data=...) at /home/milian/projects/src/heaptrack/src/analyze/gui/mainwindow.cpp:223 ``` M +47 -46 src/analyze/gui/chartmodel.cpp https://invent.kde.org/sdk/heaptrack/-/commit/6e558868fa9555fd8f75e6520cbbde628c7d424a