Bug 492221

Summary: crash in click to 'show use' (only in large project)
Product: [Applications] kdevelop Reporter: painless roaster <painless.roaster>
Component: generalAssignee: kdevelop-bugs-null
Status: RESOLVED FIXED    
Severity: crash CC: admin, asturm, igorkuo, kossebau, stefano.crocco
Priority: NOR Keywords: drkonqi
Version: unspecified   
Target Milestone: ---   
Platform: Fedora RPMs   
OS: Linux   
Latest Commit: Version Fixed In: 6.0.240801
Sentry Crash Report:
Attachments: New crash information added by DrKonqi

Description painless roaster 2024-08-26 15:26:39 UTC
Application: kdevelop (6.0.240800 (24.08.0))

Qt Version: 6.7.2
Frameworks Version: 6.5.0
Operating System: Linux 6.10.6-200.fc40.x86_64 x86_64
Windowing System: Wayland
Distribution: "Fedora Linux 40 (KDE Plasma)"
DrKonqi: 6.1.4 [CoredumpBackend]

-- Information about the crash:
a procedure that will cause a crash:
 - choose a variable
 - move the mouse cursor over it
 - click on 'show use'

only the new version 6.0.240800 (24.08.0) crashes
version 5.14.24052 24.05.2 is OK

The crash can be reproduced every time.

-- Backtrace (Reduced):
#4  0x00007f83e719dba5 in QBoxLayout::itemAt(int) const () at /lib64/libQt6Widgets.so.6
#5  0x00007f83e3b7eea6 in KDevelop::NavigatableWidgetList::items() const () at /lib64/libKDevPlatformLanguage.so.60
#6  0x00007f83e3b7f25f in KDevelop::UsesWidget::countAllUses() const () at /lib64/libKDevPlatformLanguage.so.60
#7  0x00007f83e3b7f390 in KDevelop::UsesWidget::headerLineText() const () at /lib64/libKDevPlatformLanguage.so.60
#8  0x00007f83e3b7f70f in KDevelop::UsesWidget::redrawHeaderLine() () at /lib64/libKDevPlatformLanguage.so.60


Reported using DrKonqi
Comment 1 painless roaster 2024-08-26 15:26:41 UTC
Created attachment 172977 [details]
New crash information added by DrKonqi

DrKonqi auto-attaching complete backtrace.
Comment 2 Igor Kushnir 2024-08-28 13:59:00 UTC
Cannot reproduce and the KDevelop code at the end of the backtrace looks OK to me.

Have you tried showing uses of a variable in another (small) project? Have you tried clearing the cache?
Comment 3 painless roaster 2024-08-29 06:16:04 UTC
(In reply to Igor Kushnir from comment #2)
> Nelze reprodukovat a kód KDevelop na konci backtrace mi připadá v pořádku.
> 
> Zkusili jste ukázat použití proměnné v jiném (malém) projektu? Zkoušel jsi
> vymazat mezipaměť?

It's true that according to backtrace it looks more like a problem in qt. It's crashing hard. At least 7 times out of 10. But only on a large project. On a small project, it's not a problem. I tried clearing the cache, of course.
I also tried a custom compile to rule out a build error. But it still crashed. And version 24.05.2 is still without problems.
If further plasma/qt updates don't help, I'll have to find the commit that caused the problem.
Comment 4 Igor Kushnir 2024-08-29 14:03:02 UTC
(In reply to painless roaster from comment #3)
> If further plasma/qt updates don't help, I'll have to find the commit that
> caused the problem.
You can start by installing KDevelop and Qt debug symbols to obtain a more detailed backtrace, possibly with deeper call stack and values of function arguments. Should be easy with https://fedoraproject.org/wiki/Debuginfod
Comment 5 painless roaster 2024-08-29 15:33:49 UTC
this is where it crashes:

(gdb) frame 0
#0  0x00007ffff759dba5 in QBoxLayout::itemAt (this=0x5555596e6c10, index=0) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/widgets/kernel/qboxlayout.cpp:692
692         return index >= 0 && index < d->list.size() ? d->list.at(index)->item : nullptr;
(gdb) l
687         \reimp
688     */
689     QLayoutItem *QBoxLayout::itemAt(int index) const
690     {
691         Q_D(const QBoxLayout);
692         return index >= 0 && index < d->list.size() ? d->list.at(index)->item : nullptr;
693     }
694
695     /*!
696         \reimp
(gdb) p d->list
$6 = {<QListSpecialMethods<QBoxLayoutItem*>> = {<QListSpecialMethodsBase<QBoxLayoutItem*>> = {<No data fields>}, <No data fields>}, d = {d = 0x555559661530, ptr = 0x555559661540, size = 1}}
(gdb) p d->list.d
$7 = {d = 0x555559661530, ptr = 0x555559661540, size = 1}
(gdb) p d->list.d.d
$8 = (QArrayDataPointer<QBoxLayoutItem*>::Data *) 0x555559661530
(gdb) p *d->list.d.d
$9 = {<QArrayData> = {ref_ = {_q_value = std::atomic<int> = { 1 }}, flags = {i = 0}, alloc = 2}, <No data fields>}
(gdb) p d->list.d.ptr
$10 = (QBoxLayoutItem **) 0x555559661540
(gdb) p *d->list.d.ptr
$11 = (QBoxLayoutItem *) 0x3f46
(gdb) p **d->list.d.ptr
Cannot access memory at address 0x3f46
Comment 6 painless roaster 2024-08-29 16:16:52 UTC
Comment on attachment 172977 [details]
New crash information added by DrKonqi

and here's the full backtrace

(gdb) bt full
#0  0x00007ffff759dba5 in QBoxLayout::itemAt (this=0x55555734afc0, index=0) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/widgets/kernel/qboxlayout.cpp:692
        d = 0x555557109b90
#1  0x00007ffff3f7eea6 in KDevelop::NavigatableWidgetList::items (this=this@entry=0x55555952f440) at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/kdevplatform/language/duchain/navigation/useswidget.cpp:317
        widgetItem = <optimized out>
        a = 0
        ret = {<QListSpecialMethods<QWidget*>> = {<QListSpecialMethodsBase<QWidget*>> = {<No data fields>}, <No data fields>}, d = {d = 0x0, ptr = 0x0, size = 0}}
#2  0x00007ffff3f7f25f in KDevelop::UsesWidget::countAllUses (this=this@entry=0x55555952f440) at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/kdevplatform/language/duchain/navigation/useswidget.cpp:635
        totalUses = 0
        items = {<QListSpecialMethods<QWidget*>> = {<QListSpecialMethodsBase<QWidget*>> = {<No data fields>}, <No data fields>}, d = {d = 0x0, ptr = 0x0, size = 0}}
#3  0x00007ffff3f7f390 in KDevelop::UsesWidget::headerLineText (this=0x55555952f440) at /usr/include/qt6/QtCore/qbytearrayview.h:68
#4  0x00007ffff3f7f70f in KDevelop::UsesWidget::redrawHeaderLine (this=<optimized out>) at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/kdevplatform/language/duchain/navigation/useswidget.cpp:620
#5  0x00007ffff3f840c2 in KDevelop::UsesWidget::UsesWidgetCollector::processUses (this=0x5555594eef90, topContext=Python Exception <class 'gdb.MemoryError'>: Cannot access memory at address 0x0
#6  KDevelop::UsesWidget::UsesWidgetCollector::processUses (this=this@entry=0x5555594eef90, topContext=...)
    at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/kdevplatform/language/duchain/navigation/useswidget.cpp:712
        lock = {m_lock = <optimized out>, m_locked = <optimized out>, m_timeout = <optimized out>}
        widget = <optimized out>
        toBack = <optimized out>
        doc = <optimized out>
        toFront = <optimized out>
        qt_category = {static IsOutputEnabled = true, category = <optimized out>, control = <optimized out>}
#7  0x00007ffff3f8cc02 in KDevelop::UsesCollector::updateReady (this=0x5555594eef90, url=..., topContext=...) at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/kdevplatform/language/duchain/navigation/usescollector.cpp:438
        lock = {m_lock = 0x7ffff4876380 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN8KDevelop12_GLOBAL__N_122Q_QGS_sdDUChainPrivateEEEE8instanceEvE6holder.lto_priv.0+64>, m_locked = false, m_timeout = 0}
        indexed = {m_index = 800}
        imports = {<QListSpecialMethods<KDevelop::ReferencedTopDUContext>> = {<QListSpecialMethodsBase<KDevelop::ReferencedTopDUContext>> = {<No data fields>}, <No data fields>}, d = {d = 0x7fff4d555860, ptr = 0x4c, size = 93825015805568}}
        importedParentContexts = {<QListSpecialMethods<KDevelop::DUContext::Import>> = {<QListSpecialMethodsBase<KDevelop::DUContext::Import>> = {<No data fields>}, <No data fields>}, d = {d = 0x7fff0001130f, ptr = 0x7ffff3ebf343 <KDevelop::DUChain::refCountUp(KDevelop::TopDUContext*)+131>, size = 0}}
#8  0x00007ffff3f8c584 in KDevelop::UsesCollector::updateReady (this=this@entry=0x5555594eef90, url=..., topContext=...)
    at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/kdevplatform/language/duchain/navigation/usescollector.cpp:458
        url = {m_index = 70415}
        import = @0x55555951d2d0: {m_topContext = 0x7fff4d555860}
        __for_range = @0x7fffffffc840: {<QListSpecialMethods<KDevelop::ReferencedTopDUContext>> = {<QListSpecialMethodsBase<KDevelop::ReferencedTopDUContext>> = {<No data fields>}, <No data fields>}, d = {d = 0x55555951d270, ptr = 0x55555951d280, size = 16}}
        __for_begin = {i = <optimized out>}
        __for_end = {i = <optimized out>}
        lock = {m_lock = 0x7ffff4876380 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN8KDevelop12_GLOBAL__N_122Q_QGS_sdDUChainPrivateEEEE8instanceEvE6holder.lto_priv.0+64>, m_locked = false, m_timeout = 0}
        indexed = {m_index = 1023}
        imports = {<QListSpecialMethods<KDevelop::ReferencedTopDUContext>> = {<QListSpecialMethodsBase<KDevelop::ReferencedTopDUContext>> = {<No data fields>}, <No data fields>}, d = {d = 0x55555951d270, ptr = 0x55555951d280, size = 16}}
        importedParentContexts = {<QListSpecialMethods<KDevelop::DUContext::Import>> = {<QListSpecialMethodsBase<KDevelop::DUContext::Import>> = {<No data fields>}, <No data fields>}, d = {d = 0x5555595602f0, ptr = 0x555559560300, size = 16}}
#9  0x00007ffff3f8ce98 in KDevelop::UsesCollector::qt_static_metacall (_o=_o@entry=0x5555594eef90, _c=_c@entry=QMetaObject::InvokeMetaMethod, _id=_id@entry=3, _a=_a@entry=0x7fffffffcb20)
    at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/redhat-linux-build/kdevplatform/language/KDevPlatformLanguage_autogen/include/moc_usescollector.cpp:122
        _t = 0x5555594eef90
#10 0x00007ffff61ad8b1 in QMetaMethodInvoker::invokeImpl
    (self=..., target=target@entry=0x5555594eef90, connectionType=connectionType@entry=Qt::DirectConnection, paramCount=paramCount@entry=3, parameters=parameters@entry=0x7fffffffcb20, typeNames=0x7fffffffcb38, metaTypes=0x7fffffffcb50) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/kernel/qmetaobject.cpp:2754
        object = <optimized out>
        priv = <optimized out>
        MetaTypesAreOptional = <optimized out>
        methodMetaTypes = <optimized out>
        param = 0x7fffffffcb20
        checkTypesAreCompatible = {__priv = <optimized out>, __typeNames = <optimized out>, __metaTypes = <optimized out>, __methodMetaTypes = <optimized out>}
        currentThreadId = 0x0
        objectThread = 0x0
        receiverInSameThread = {__currentThreadId = <optimized out>, __objectThread = <optimized out>, __object = <optimized out>}
        idx_relative = 3
        idx_offset = <optimized out>
        callFunction = 0x7ffff3f8cd30 <KDevelop::UsesCollector::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>
#11 0x00007ffff61ae9dd in QMetaObject::invokeMethodImpl
    (obj=obj@entry=0x5555594eef90, member=member@entry=0x7ffff4028235 "updateReady", type=type@entry=Qt::DirectConnection, paramCount=paramCount@entry=3, parameters=parameters@entry=0x7fffffffcb20, typeNames=typeNames@entry=0x--Type <RET> for more, q to quit, c to continue without paging--c
7fffffffcb38, metaTypes=0x7fffffffcb50) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/kernel/qmetaobject.cpp:1604
        m = {mobj = 0x7ffff4071680 <KDevelop::UsesCollector::staticMetaObject>, data = {d = 0x7ffff4034a20 <_ZL52qt_meta_data_CLASSKDevelopSCOPEUsesCollectorENDCLASS.lto_priv.0+128>}}
        r = <optimized out>
        i = 3
        priv = 0x7ffff40349a0 <_ZL52qt_meta_data_CLASSKDevelopSCOPEUsesCollectorENDCLASS.lto_priv.0>
        name = {m_size = 11, m_data = 0x7ffff4028235 "updateReady"}
        meta = 0x7ffff4071680 <KDevelop::UsesCollector::staticMetaObject>
#12 0x00007ffff3ec6574 in QMetaObject::invokeMethod<void, QMetaMethodArgument, QMetaMethodArgument> (obj=0x5555594eef90, member=0x7ffff4028235 "updateReady", c=Qt::DirectConnection, r=...)
    at /usr/include/qt6/QtCore/qobjectdefs.h:376
        h = {parameters = {_M_elems = {0x0, 0x5555597d2fcc, 0x7fffffffcb08}}, typeNames = {_M_elems = {0x0, 0x7ffff4028015 "KDevelop::IndexedString", 0x7ffff402a018 "KDevelop::ReferencedTopDUContext"}}, metaTypes = {_M_elems = {0x0, 0x7ffff4078600 <QtPrivate::QMetaTypeInterfaceWrapper<KDevelop::IndexedString>::metaType>, 0x7ffff4078580 <QtPrivate::QMetaTypeInterfaceWrapper<KDevelop::ReferencedTopDUContext>::metaType>}}}
#13 QMetaObject::invokeMethod<QMetaMethodArgument, QMetaMethodArgument> (obj=0x5555594eef90, member=0x7ffff4028235 "updateReady", c=Qt::DirectConnection) at /usr/include/qt6/QtCore/qobjectdefs.h:389
        r = {<QMetaMethodReturnArgument> = {metaType = <optimized out>, name = <optimized out>, data = <optimized out>}, <No data fields>}
#14 KDevelop::DUChain::updateContextForUrl (this=<optimized out>, document=..., minFeatures=..., notifyReady=0x5555594eef90, priority=1)
    at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/kdevplatform/language/duchain/duchain.cpp:1882
        lock = {m_lock = 0x7ffff4876380 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN8KDevelop12_GLOBAL__N_122Q_QGS_sdDUChainPrivateEEEE8instanceEvE6holder.lto_priv.0+64>, m_locked = false, m_timeout = 0}
        standardContext = <optimized out>
        backgroundParser = <optimized out>
        listenerAdded = <optimized out>
#15 0x00007ffff3f8a932 in KDevelop::UsesCollector::startCollecting (this=<optimized out>) at /usr/include/qt6/QtCore/qflags.h:74
        file = @0x5555597d2fcc: {m_index = 83533}
        __for_range = @0x7fffffffcc90: {q_hash = {d = 0x5555594c84a0}}
        __for_begin = {i = {i = {d = <optimized out>, bucket = <optimized out>}}}
        __for_end = {i = {i = {d = <optimized out>, bucket = <optimized out>}}}
        allDeclarations = {q_hash = {d = 0x5555594bfe30}}
        collected = {q_hash = {d = 0x5555594b92a0}}
        currentFeaturesManipulated = {q_hash = {d = 0x5555594d4740}}
        decls = {<QListSpecialMethods<KDevelop::Declaration*>> = {<QListSpecialMethodsBase<KDevelop::Declaration*>> = {<No data fields>}, <No data fields>}, d = {d = 0x555559743fb0, ptr = 0x555559743fc0, size = 1}}
        checker = {m_collector = @0x5555594eef90}
        file = <optimized out>
        rootFiles = {q_hash = {d = 0x5555594c84a0}}
        candidateTopContexts = {<QListSpecialMethods<KDevelop::ReferencedTopDUContext>> = {<QListSpecialMethodsBase<KDevelop::ReferencedTopDUContext>> = {<No data fields>}, <No data fields>}, d = {d = 0x5555594bfe60, ptr = 0x5555594bfe70, size = 2}}
        visited = {q_hash = {d = 0x555558fe2560}}
        allFiles = {q_hash = {d = 0x555559780c50}}
        decl = <optimized out>
        lock = {m_lock = 0x7ffff4876380 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN8KDevelop12_GLOBAL__N_122Q_QGS_sdDUChainPrivateEEEE8instanceEvE6holder.lto_priv.0+64>, m_locked = true, m_timeout = 0}
#16 0x00007ffff3f81a72 in KDevelop::UsesWidget::UsesWidget (this=0x55555952f440, declaration=<optimized out>, customCollector=..., this=<optimized out>, declaration=<optimized out>, customCollector=<optimized out>)
    at /usr/include/qt6/QtCore/qsharedpointer_impl.h:274
        lock = {m_lock = 0x7ffff4876380 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN8KDevelop12_GLOBAL__N_122Q_QGS_sdDUChainPrivateEEEE8instanceEvE6holder.lto_priv.0+64>, m_locked = true, m_timeout = 0}
        lock = {m_lock = <optimized out>, m_locked = <optimized out>, m_timeout = <optimized out>}
#17 0x00007ffff3f74f2f in KDevelop::UsesNavigationContext::UsesNavigationContext (this=0x5555594da920, declaration=..., previousContext=<optimized out>, this=<optimized out>, declaration=..., previousContext=<optimized out>)
    at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/kdevplatform/language/duchain/navigation/usesnavigationcontext.cpp:21
#18 0x00007ffff3f6f652 in KDevelop::AbstractNavigationContext::execute (this=this@entry=0x5555594b5b40, action=...)
    at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/kdevplatform/language/duchain/navigation/abstractnavigationcontext.cpp:202
        d = <optimized out>
#19 0x00007fffc170475b in ContextBrowserPlugin::showUsesDelayed (this=<optimized out>, declaration=...) at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/plugins/contextbrowser/contextbrowser.cpp:386
        nextContext = {d = 0x7fffffffd130}
        decl = <optimized out>
        widget = {wp = {d = <optimized out>, value = <optimized out>}}
        lock = {m_lock = 0x7ffff4876380 <_ZZN13QGlobalStaticIN14QtGlobalStatic6HolderIN8KDevelop12_GLOBAL__N_122Q_QGS_sdDUChainPrivateEEEE8instanceEvE6holder.lto_priv.0+64>, m_locked = true, m_timeout = 0}
        toolView = <optimized out>
        view = <optimized out>
        lock = {m_lock = <optimized out>, m_locked = <optimized out>, m_timeout = <optimized out>}
        decl = <optimized out>
        toolView = <optimized out>
        view = <optimized out>
        widget = {wp = {d = <optimized out>, value = <optimized out>}}
        nextContext = {d = <optimized out>}
#20 ContextBrowserPlugin::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>)
    at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/redhat-linux-build/plugins/contextbrowser/kdevcontextbrowser_autogen/include/moc_contextbrowser.cpp:294
        _t = <optimized out>
#21 0x00007ffff61edd4b in QObject::event (this=0x5555555f3350, e=0x7fffbc001ba0) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/kernel/qobject.cpp:1452
        mce = 0x7fffbc001ba0
        connections = <optimized out>
        sender = {previous = 0x0, receiver = 0x5555555f3350, sender = 0x0, signal = -1}
#22 0x00007ffff758b218 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x5555555f3350, e=0x7fffbc001ba0) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/widgets/kernel/qapplication.cpp:3287
        consumed = false
        filtered = false
#23 0x00007ffff6196dc8 in QCoreApplication::notifyInternal2 (receiver=0x5555555f3350, event=0x7fffbc001ba0) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1142
        selfRequired = <optimized out>
        result = false
        cbdata = {0x5555555f3350, 0x7fffbc001ba0, 0x7fffffffd17f}
        d = <optimized out>
        threadData = 0x5555555e1a70
        scopeLevelCounter = {threadData = 0x5555555e1a70}
#24 0x00007ffff619702d in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1583
#25 0x00007ffff619ab91 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x5555555e1a70) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1940
        e = 0x7fffbc001ba0
        pe = <optimized out>
        r = <optimized out>
        relocker = {m_func = {__locker = <optimized out>}, m_invoke = <optimized out>}
        event_deleter = {d = 0x7fffbc001ba0}
        locker = {_M_device = 0x5555555e1ac8, _M_owns = false}
        startOffset = 0
        i = @0x5555555e1ab8: 1
        cleanup = {receiver = <optimized out>, event_type = <optimized out>, data = <optimized out>, exceptionCaught = <optimized out>}
#26 0x00007ffff619ae3d in QCoreApplication::sendPostedEvents (receiver=<optimized out>, event_type=<optimized out>) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1797
        data = <optimized out>
#27 0x00007ffff64858ef in postEventSourceDispatch (s=0x5555555e7070) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:244
        source = 0x5555555e7070
#28 0x00007ffff2de3e8c in g_main_dispatch (context=0x7fffc4000f00) at ../glib/gmain.c:3344
        dispatch = 0x7ffff64858d0 <postEventSourceDispatch(GSource*, GSourceFunc, gpointer)>
        prev_source = 0x0
        begin_time_nsec = 13641485030257
        was_in_call = 0
        user_data = 0x0
        callback = 0x0
        cb_funcs = 0x0
        cb_data = 0x0
        need_destroy = <optimized out>
        source = 0x5555555e7070
        current = 0x555555c74de0
        i = 0
        __func__ = {<optimized out> <repeats 16 times>}
#29 g_main_context_dispatch_unlocked (context=0x7fffc4000f00) at ../glib/gmain.c:4152
#30 0x00007ffff2e45c98 in g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7fffc4000f00, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
        max_priority = 0
        timeout = 0
        some_ready = 1
        nfds = 10
        allocated_nfds = <optimized out>
        fds = 0x55555923aa20
        begin_time_nsec = 13641485024177
#31 0x00007ffff2de5383 in g_main_context_iteration (context=0x7fffc4000f00, may_block=1) at ../glib/gmain.c:4282
        retval = <optimized out>
#32 0x00007ffff64850a3 in QEventDispatcherGlib::processEvents (this=0x555555605890, flags=...) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:394
        d = 0x55555560ad60
        canWait = true
        savedFlags = {i = 0}
        result = <optimized out>
#33 0x00007ffff61a3b03 in QEventLoop::exec (this=this@entry=0x7fffffffd510, flags=..., flags@entry=...) at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/global/qflags.h:34
        d = 0x555556e83cd0
        threadData = <optimized out>
        locker = {m_mutex = 0x5555555e1ba8, m_isLocked = false}
        ref = {d = <optimized out>, locker = <optimized out>, exceptionCaught = <optimized out>}
        app = <optimized out>
#34 0x00007ffff619f9bc in QCoreApplication::exec () at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/corelib/global/qflags.h:74
        threadData = 0x5555555e1a70
        eventLoop = {<QObject> = {_vptr.QObject = 0x7ffff6688f60 <vtable for QEventLoop+16>, static staticMetaObject = {d = {superdata = {direct = 0x0}, stringdata = 0x7ffff64dbc40 <(anonymous namespace)::qt_meta_stringdata_CLASSQObjectENDCLASS>, data = 0x7ffff64dbb20 <qt_meta_data_CLASSQObjectENDCLASS>, static_metacall = 0x7ffff61f9c20 <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffff668aa60 <qt_incomplete_metaTypeArray<(anonymous namespace)::qt_meta_stringdata_CLASSQObjectENDCLASS_t, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QObject, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QObject*, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QString const&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QObject*, std::integral_constant<bool, false> > >>, extradata = 0x0}}, d_ptr = {d = 0x555556e83cd0}}, static staticMetaObject = {d = {superdata = {direct = 0x7ffff6684ea0 <QObject::staticMetaObject>}, stringdata = 0x7ffff64d92a0 <(anonymous namespace)::qt_meta_stringdata_CLASSQEventLoopENDCLASS>, data = 0x7ffff64d91a0 <qt_meta_data_CLASSQEventLoopENDCLASS>, static_metacall = 0x7ffff61a36e0 <QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffff6688e80 <qt_incomplete_metaTypeArray<(anonymous namespace)::qt_meta_stringdata_CLASSQEventLoopENDCLASS_t, QtPrivate::TypeAndForceComplete<QFlags<QEventLoop::ProcessEventsFlag>, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QEventLoop, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<int, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> > >>, extradata = 0x0}}}
        returnCode = <optimized out>
#35 0x00007ffff69d67ed in QGuiApplication::exec () at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/gui/kernel/qguiapplication.cpp:1926
#36 0x00007ffff758b189 in QApplication::exec () at /usr/src/debug/qt6-qtbase-6.7.2-4.fc40.x86_64/src/widgets/kernel/qapplication.cpp:2555
#37 0x0000555555562134 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/kdevelop-24.08.0-1.fc40.x86_64/app/main.cpp:822
        timer = {t1 = -9223372036854775808, t2 = -9223372036854775808}
        debugArgs = {<QListSpecialMethods<QString>> = {<QListSpecialMethodsBase<QString>> = {<No data fields>}, <No data fields>}, d = {d = 0x0, ptr = 0x0, size = 0}}
        debugeeName = {d = {d = 0x0, ptr = 0x0, size = 0}, static _empty = 0 u'\000'}
        app = {<QApplication> = {<QGuiApplication> = {<QCoreApplication> = {<QObject> = {_vptr.QObject = 0x55555556c688 <vtable for KDevelopApplication+16>, static staticMetaObject = {d = {superdata = {direct = 0x0}, stringdata = 0x7ffff64dbc40 <(anonymous namespace)::qt_meta_stringdata_CLASSQObjectENDCLASS>, data = 0x7ffff64dbb20 <qt_meta_data_CLASSQObjectENDCLASS>, static_metacall = 0x7ffff61f9c20 <QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffff668aa60 <qt_incomplete_metaTypeArray<(anonymous namespace)::qt_meta_stringdata_CLASSQObjectENDCLASS_t, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QObject, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QObject*, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QString const&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QObject*, std::integral_constant<bool, false> > >>, extradata = 0x0}}, d_ptr = {d = 0x55555558a450}}, static staticMetaObject = {d = {superdata = {direct = 0x7ffff6684ea0 <QObject::staticMetaObject>}, stringdata = 0x7ffff64d7880 <(anonymous namespace)::qt_meta_stringdata_CLASSQCoreApplicationENDCLASS>, data = 0x7ffff64d76e0 <qt_meta_data_CLASSQCoreApplicationENDCLASS>, static_metacall = 0x7ffff6198fe0 <QCoreApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffff6688ae0 <qt_incomplete_metaTypeArray<(anonymous namespace)::qt_meta_stringdata_CLASSQCoreApplicationENDCLASS_t, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<bool, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QCoreApplication, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<int, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> > >>, extradata = 0x0}}, static self = 0x7fffffffd680}, static staticMetaObject = {d = {superdata = {direct = 0x7ffff6688c00 <QCoreApplication::staticMetaObject>}, stringdata = 0x7ffff7012fe0 <(anonymous namespace)::qt_meta_stringdata_CLASSQGuiApplicationENDCLASS>, data = 0x7ffff7012ce0 <qt_meta_data_CLASSQGuiApplicationENDCLASS>, static_metacall = 0x7ffff69df3a0 <QGuiApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffff712ce80 <qt_incomplete_metaTypeArray<(anonymous namespace)::qt_meta_stringdata_CLASSQGuiApplicationENDCLASS_t, QtPrivate::TypeAndForceComplete<QIcon, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<Qt::LayoutDirection, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<bool, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QScreen*, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QGuiApplication, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QScreen*, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QScreen*, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QScreen*, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QObject*, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QWindow*, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<Qt::ApplicationState, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<Qt::LayoutDirection, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QSessionManager&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QSessionManager&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QPalette const&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QFont const&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<long long, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QObject*, std::integral_constant<bool, false> > >>, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = {direct = 0x55555556c5a0 <QGuiApplication::staticMetaObject>}, stringdata = 0x7ffff7a1d2a0 <(anonymous namespace)::qt_meta_stringdata_CLASSQApplicationENDCLASS>, data = 0x7ffff7a1d100 <qt_meta_data_CLASSQApplicationENDCLASS>, static_metacall = 0x7ffff7591210 <QApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x7ffff7b63900 <qt_incomplete_metaTypeArray<(anonymous namespace)::qt_meta_stringdata_CLASSQApplicationENDCLASS_t, QtPrivate::TypeAndForceComplete<int, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<int, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<int, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<int, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<int, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<int, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<bool, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QApplication, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QWidget*, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QWidget*, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QString const&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<bool const, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> > >>, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = {direct = 0x7ffff7b639a0 <QApplication::staticMetaObject>}, stringdata = 0x55555556ae60 <(anonymous namespace)::qt_meta_stringdata_CLASSKDevelopApplicationENDCLASS>, data = 0x55555556a300 <qt_meta_data_CLASSKDevelopApplicationENDCLASS>, static_metacall = 0x555555564730 <KDevelopApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, metaTypes = 0x55555556c510 <qt_incomplete_metaTypeArray<(anonymous namespace)::qt_meta_stringdata_CLASSKDevelopApplicationENDCLASS_t, QtPrivate::TypeAndForceComplete<KDevelopApplication, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<QSessionManager&, std::integral_constant<bool, false> > >>, extradata = 0x0}}}
        aboutData = {d = std::unique_ptr<KAboutDataPrivate> = {get() = 0x55555571c660}}
        parser = {d = 0x555555c4b760}
        initialFiles = {<QListSpecialMethods<UrlInfo>> = {<QListSpecialMethodsBase<UrlInfo>> = {<No data fields>}, <No data fields>}, d = {d = <optimized out>, ptr = <optimized out>, size = <optimized out>}}
        initialDirectories = {<QListSpecialMethods<UrlInfo>> = {<QListSpecialMethodsBase<UrlInfo>> = {<No data fields>}, <No data fields>}, d = {d = <optimized out>, ptr = <optimized out>, size = <optimized out>}}
        files = {<QListSpecialMethods<QString>> = {<QListSpecialMethodsBase<QString>> = {<No data fields>}, <No data fields>}, d = {d = 0x0, ptr = 0x0, size = 0}}
        availableSessionInfos = {<QListSpecialMethods<KDevelop::SessionInfo>> = {<QListSpecialMethodsBase<KDevelop::SessionInfo>> = {<No data fields>}, <No data fields>}, d = {d = 0x555555c93680, ptr = 0x555555c93690, size = 1}}
        session = {d = {d = 0x0, ptr = 0x0, size = 0}, static _empty = 0 u'\000'}
        nRunningSessions = <optimized out>
        core = 0x555555fdc920
        fetchUrlStrings = {<QListSpecialMethods<QString>> = {<QListSpecialMethodsBase<QString>> = {<No data fields>}, <No data fields>}, d = {d = 0x0, ptr = 0x0, size = 0}}
        debugStr = {d = {d = 0x0, ptr = 0x555555568912 u"debug", size = 5}, static _empty = 0 u'\000'}
Comment 7 Igor Kushnir 2024-08-29 18:35:52 UTC
Looks like a dangling pointer or memory corruption.

> I also tried a custom compile to rule out a build error. But it still crashed. And version 24.05.2 is still without problems.
> If further plasma/qt updates don't help, I'll have to find the commit that caused the problem.
Just created a tag https://invent.kde.org/kdevelop/kdevelop/-/tags/v5.15 at the last KF5 commit. If/when you decide to bisect, you can compile KDevelop at the tagged commit against KF5/Qt5 and see if the crash is present. And you can check whether the crash is present in this early working KF6 commit: https://commits.kde.org/kdevelop/256bf70b947d0508a08f8321b69a4b8f375dab13 . If the crash is present in one but absent from the other of the two commits, we can be almost certain the regression is caused by the upgrade to KF6/Qt6 itself rather than some other KDevelop code change.
Comment 8 Friedrich W. H. Kossebau 2024-08-29 19:45:50 UTC
I can reproduce with current 24.08 branch. Seems it might be another case of Qt6 being more fragile about inserting into layout at positions that di not exist, my fprint debogging found NavigatableWidgetList::addItem(QWidget* widget, int pos) is called with a pos > m_itemLayout->count(). Not yet got around to investigate why this happens. I bet for now 2 cents this being a similar case to https://invent.kde.org/kdevelop/kdevelop/-/merge_requests/611 where Qt6 being more fragile shows bugs already in the old code, just Qt5 being more forgiving :)
Comment 9 Friedrich W. H. Kossebau 2024-08-29 20:28:23 UTC
One bad layout index I found to be coming due to the toBack logic introduced here:
https://invent.kde.org/kdevelop/kdevelop/-/commit/cb01708424c1b21077761c6259e50fec1fac071f#eee3e6828db5f7aa76d9e9d3e7037ef65dabc9e5_562_626

No idea yet why this was introduced like that. The existing -1 already means "insert at back", perhaps this was simply missed and then some typo was made and widget used instead of m_widget? Bed time here, just dropping current findings.
Comment 10 Bug Janitor Service 2024-08-30 05:37:39 UTC
A possibly relevant merge request was started @ https://invent.kde.org/kdevelop/kdevelop/-/merge_requests/660
Comment 11 Igor Kushnir 2024-09-04 17:50:06 UTC
Git commit 32d388680839d22c8d635dc8c63a7a8845901e96 by Igor Kushnir.
Committed on 04/09/2024 at 15:23.
Pushed by igorkushnir into branch 'master'.

UsesWidget: don't try to insert items at invalid positions

cb01708424c1b21077761c6259e50fec1fac071f intended to insert
high-priority uses at the top, normal-priority in the middle, and
low-priority ones (declaration/definition-only) at the bottom. But
optionally passing widget->items().size() as the insertion position to
NavigatableWidgetList::addItem() cannot achieve that. Furthermore, the
number of items in `widget` can be greater than the number of items in
the higher-level `m_widget`. In this case KDevelop eventually segfaults
in QBoxLayout::itemAt() since Qt 6, or given a Qt build with assertions
enabled, the "index out of range" assertion fails in
QBoxLayout::insertWidget() => QBoxLayoutPrivate::validateIndex().

Remove the broken and crashing insertion at widget->items().size() and
insert both normal- and low-priority uses at the bottom for now.
FIXED-IN: 6.0.240801

M  +6    -1    kdevplatform/language/duchain/navigation/useswidget.cpp

https://invent.kde.org/kdevelop/kdevelop/-/commit/32d388680839d22c8d635dc8c63a7a8845901e96
Comment 12 Igor Kushnir 2024-09-04 17:54:21 UTC
Git commit c7d509b5846f24760c6af2dbb5fec8e727c5a86a by Igor Kushnir.
Committed on 04/09/2024 at 17:52.
Pushed by igorkushnir into branch 'release/24.08'.

UsesWidget: don't try to insert items at invalid positions

cb01708424c1b21077761c6259e50fec1fac071f intended to insert
high-priority uses at the top, normal-priority in the middle, and
low-priority ones (declaration/definition-only) at the bottom. But
optionally passing widget->items().size() as the insertion position to
NavigatableWidgetList::addItem() cannot achieve that. Furthermore, the
number of items in `widget` can be greater than the number of items in
the higher-level `m_widget`. In this case KDevelop eventually segfaults
in QBoxLayout::itemAt() since Qt 6, or given a Qt build with assertions
enabled, the "index out of range" assertion fails in
QBoxLayout::insertWidget() => QBoxLayoutPrivate::validateIndex().

Remove the broken and crashing insertion at widget->items().size() and
insert both normal- and low-priority uses at the bottom for now.
FIXED-IN: 6.0.240801
(cherry picked from commit 32d388680839d22c8d635dc8c63a7a8845901e96)

M  +6    -1    kdevplatform/language/duchain/navigation/useswidget.cpp

https://invent.kde.org/kdevelop/kdevelop/-/commit/c7d509b5846f24760c6af2dbb5fec8e727c5a86a
Comment 13 Andreas Sturmlechner 2024-09-09 08:47:52 UTC
*** Bug 492864 has been marked as a duplicate of this bug. ***
Comment 14 Igor Kushnir 2024-10-01 18:58:02 UTC
*** Bug 493906 has been marked as a duplicate of this bug. ***