Bug 425994 - Crashes caused by DebugController::showStepInSource() when a user requests KDevelop exit just before a code breakpoint is hit
Summary: Crashes caused by DebugController::showStepInSource() when a user requests KD...
Status: RESOLVED FIXED
Alias: None
Product: kdevelop
Classification: Unclassified
Component: CPP Debugger (show other bugs)
Version: git master
Platform: Compiled Sources Linux
: NOR crash (vote)
Target Milestone: ---
Assignee: Igor Kushnir
URL:
Keywords:
: 426371 (view as bug list)
Depends on:
Blocks:
 
Reported: 2020-08-30 16:00 UTC by Igor Kushnir
Modified: 2020-10-16 14:39 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 5.6.1


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Igor Kushnir 2020-08-30 16:00:23 UTC
SUMMARY
When a user exits KDevelop during debugging, a code breakpoint can be hit, and as a consequence DebugController::showStepInSource() be called in the event loop started by Core::cleanup() => BackgroundParser::waitForIdle(). Oblivious to the application state, DebugController then tries to open a document, which eventually results in a crash inside a slot connected to either &IDocumentController::textDocumentCreated or &IDocumentController::documentLoaded (these signals are emitted in the process of opening a document).

SOFTWARE/OS VERSIONS
Manjaro GNU/Linux, Xfce
KDE Frameworks Version: 5.73.0
Qt Version: 5.15.0

ADDITIONAL INFORMATION
I am going to create a Merge Request with a fix soon.

BACKTRACE 1 (Debug)
Application: KDevelop (kdevelop), signal: Aborted

[KCrash Handler]
#4  0x00007fb081ac2615 in raise () at /usr/lib/libc.so.6
#5  0x00007fb081aab862 in abort () at /usr/lib/libc.so.6
#6  0x00007fb0820209ac in qt_message_fatal (message=<synthetic pointer>..., context=...) at global/qlogging.cpp:1914
#7  QMessageLogger::fatal(char const*, ...) const (this=this@entry=0x7ffd52ac7858, msg=msg@entry=0x7fb082326ea0 "ASSERT: \"%s\" in file %s, line %d") at global/qlogging.cpp:893
#8  0x00007fb08201fd59 in qt_assert(char const*, char const*, int) (assertion=<optimized out>, file=<optimized out>, line=<optimized out>) at ../../include/QtCore/../../src/corelib/global/qlogging.h:90
#9  0x00007fb081a37d9b in KDevelop::BreakpointModel::setupMovingCursor(KTextEditor::Document*, KDevelop::Breakpoint*) const (this=0x55d7e2d11c70, document=0x55d80c111610, breakpoint=0x55d7e2d77550) at ../kdevplatform/debugger/breakpoint/breakpointmodel.cpp:729
#10 0x00007fb081a3489d in KDevelop::BreakpointModel::textDocumentCreated(KDevelop::IDocument*) (this=0x55d7e2d11c70, doc=0x55d7e4b96440) at ../kdevplatform/debugger/breakpoint/breakpointmodel.cpp:149
#11 0x00007fb081a3a6b8 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<KDevelop::IDocument*>, void, void (KDevelop::BreakpointModel::*)(KDevelop::IDocument*)>::call(void (KDevelop::BreakpointModel::*)(KDevelop::IDocument*), KDevelop::BreakpointModel*, void**) (f=(void (KDevelop::BreakpointModel::*)(KDevelop::BreakpointModel * const, KDevelop::IDocument *)) 0x7fb081a346dc <KDevelop::BreakpointModel::textDocumentCreated(KDevelop::IDocument*)>, o=0x55d7e2d11c70, arg=0x7ffd52ac7b30) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#12 0x00007fb081a3a248 in QtPrivate::FunctionPointer<void (KDevelop::BreakpointModel::*)(KDevelop::IDocument*)>::call<QtPrivate::List<KDevelop::IDocument*>, void>(void (KDevelop::BreakpointModel::*)(KDevelop::IDocument*), KDevelop::BreakpointModel*, void**) (f=(void (KDevelop::BreakpointModel::*)(KDevelop::BreakpointModel * const, KDevelop::IDocument *)) 0x7fb081a346dc <KDevelop::BreakpointModel::textDocumentCreated(KDevelop::IDocument*)>, o=0x55d7e2d11c70, arg=0x7ffd52ac7b30) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#13 0x00007fb081a39d7c in QtPrivate::QSlotObject<void (KDevelop::BreakpointModel::*)(KDevelop::IDocument*), QtPrivate::List<KDevelop::IDocument*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x55d7e2d11a80, r=0x55d7e2d11c70, a=0x7ffd52ac7b30, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#14 0x00007fb082279a26 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffd52ac7b30, r=0x55d7e2d11c70, this=0x55d7e2d11a80) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#15 doActivate<false>(QObject*, int, void**) (sender=0x55d7e2ca73c0, signal_index=8, argv=0x7ffd52ac7b30) at kernel/qobject.cpp:3886
#16 0x00007fb084b76d0c in KDevelop::IDocumentController::textDocumentCreated(KDevelop::IDocument*) (this=0x55d7e2ca73c0, _t1=0x55d7e4b96440) at kdevplatform/interfaces/KDevPlatformInterfaces_autogen/EWIEGA46WW/moc_idocumentcontroller.cpp:451
#17 0x00007fb084b80bca in KDevelop::IDocument::notifyTextDocumentCreated() (this=0x55d7e4b96440) at ../kdevplatform/interfaces/idocument.cpp:98
#18 0x00007fb086084d26 in KDevelop::TextDocument::createViewWidget(QWidget*) (this=0x55d7e4b96420, parent=0x55d7ffb785f0) at ../kdevplatform/shell/textdocument.cpp:375
#19 0x00007fb086086184 in KDevelop::TextView::createWidget(QWidget*) (this=0x55d80b5a3350, parent=0x55d7ffb785f0) at ../kdevplatform/shell/textdocument.cpp:631
#20 0x00007fb084ce26a3 in Sublime::View::widget(QWidget*) (this=0x55d80b5a3350, parent=0x55d7ffb785f0) at ../kdevplatform/sublime/view.cpp:84
#21 0x00007fb084cd6ec4 in Sublime::MainWindowPrivate::ViewCreator::operator()(Sublime::AreaIndex*) (this=0x7ffd52ac7fd0, index=0x55d7e2858b70) at ../kdevplatform/sublime/mainwindow_p.cpp:414
#22 0x00007fb084cdcd87 in Sublime::Area::walkViewsInternal<Sublime::MainWindowPrivate::ViewCreator>(Sublime::MainWindowPrivate::ViewCreator&, Sublime::AreaIndex*) (this=0x55d7e2858af0, op=..., index=0x55d7e2858b70) at ../kdevplatform/sublime/areawalkers.h:32
#23 0x00007fb084cdaef1 in Sublime::Area::walkViews<Sublime::MainWindowPrivate::ViewCreator>(Sublime::MainWindowPrivate::ViewCreator&, Sublime::AreaIndex*) (this=0x55d7e2858af0, op=..., index=0x55d7e2858b70) at ../kdevplatform/sublime/areawalkers.h:48
#24 0x00007fb084cd7bc4 in Sublime::MainWindowPrivate::viewAdded(Sublime::AreaIndex*, Sublime::View*) (this=0x55d7e2574c10, index=0x55d7e2858b70, view=0x55d80b5a3350) at ../kdevplatform/sublime/mainwindow_p.cpp:584
#25 0x00007fb084cd3cda in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<Sublime::AreaIndex*, Sublime::View*>, void, void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*)>::call(void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*), Sublime::MainWindowPrivate*, void**) (f=(void (Sublime::MainWindowPrivate::*)(Sublime::MainWindowPrivate * const, Sublime::AreaIndex *, Sublime::View *)) 0x7fb084cd79d4 <Sublime::MainWindowPrivate::viewAdded(Sublime::AreaIndex*, Sublime::View*)>, o=0x55d7e2574c10, arg=0x7ffd52ac81c0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#26 0x00007fb084cd373a in QtPrivate::FunctionPointer<void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*)>::call<QtPrivate::List<Sublime::AreaIndex*, Sublime::View*>, void>(void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*), Sublime::MainWindowPrivate*, void**) (f=(void (Sublime::MainWindowPrivate::*)(Sublime::MainWindowPrivate * const, Sublime::AreaIndex *, Sublime::View *)) 0x7fb084cd79d4 <Sublime::MainWindowPrivate::viewAdded(Sublime::AreaIndex*, Sublime::View*)>, o=0x55d7e2574c10, arg=0x7ffd52ac81c0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#27 0x00007fb084cd31e8 in QtPrivate::QSlotObject<void (Sublime::MainWindowPrivate::*)(Sublime::AreaIndex*, Sublime::View*), QtPrivate::List<Sublime::AreaIndex*, Sublime::View*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x55d80c59c9e0, r=0x55d7e2574c10, a=0x7ffd52ac81c0, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#28 0x00007fb082279a26 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffd52ac81c0, r=0x55d7e2574c10, this=0x55d80c59c9e0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#29 doActivate<false>(QObject*, int, void**) (sender=0x55d7e2858af0, signal_index=3, argv=0x7ffd52ac81c0) at kernel/qobject.cpp:3886
#30 0x00007fb084caa56c in Sublime::Area::viewAdded(Sublime::AreaIndex*, Sublime::View*) (this=0x55d7e2858af0, _t1=0x55d7e2858b70, _t2=0x55d80b5a3350) at kdevplatform/sublime/KDevPlatformSublime_autogen/EWIEGA46WW/moc_area.cpp:282
#31 0x00007fb084caf32e in Sublime::Area::addView(Sublime::View*, Sublime::AreaIndex*, Sublime::View*) (this=0x55d7e2858af0, view=0x55d80b5a3350, index=0x55d7e2858b70, after=0x0) at ../kdevplatform/sublime/area.cpp:187
#32 0x00007fb084caf3c8 in Sublime::Area::addView(Sublime::View*, Sublime::View*) (this=0x55d7e2858af0, view=0x55d80b5a3350, after=0x0) at ../kdevplatform/sublime/area.cpp:201
#33 0x00007fb086095fba in KDevelop::DocumentControllerPrivate::openDocumentInternal(KDevelop::IDocument*, KTextEditor::Range const&, QFlags<KDevelop::IDocumentController::DocumentActivation>, KDevelop::IDocument*) (this=0x55d7e2c82900, doc=0x55d7e4b96440, range=..., activationParams=..., buddy=0x0) at ../kdevplatform/shell/documentcontroller.cpp:497
#34 0x00007fb0860952aa in KDevelop::DocumentControllerPrivate::openDocumentInternal(QUrl const&, QString const&, KTextEditor::Range const&, QString const&, QFlags<KDevelop::IDocumentController::DocumentActivation>, KDevelop::IDocument*) (this=0x55d7e2c82900, inputUrl=..., prefName=..., range=..., encoding=..., activationParams=..., buddy=0x0) at ../kdevplatform/shell/documentcontroller.cpp:339
#35 0x00007fb08608da62 in KDevelop::DocumentController::openDocument(QUrl const&, KTextEditor::Range const&, QFlags<KDevelop::IDocumentController::DocumentActivation>, QString const&, KDevelop::IDocument*) (this=0x55d7e2ca73c0, inputUrl=..., range=..., activationParams=..., encoding=..., buddy=0x0) at ../kdevplatform/shell/documentcontroller.cpp:702
#36 0x00007fb084b81667 in KDevelop::IDocumentController::openDocument(QUrl const&, KTextEditor::Cursor const&, QFlags<KDevelop::IDocumentController::DocumentActivation>, QString const&) (this=0x55d7e2ca73c0, url=..., cursor=..., activationParams=..., encoding=...) at ../kdevplatform/interfaces/idocumentcontroller.cpp:33
#37 0x00007fb0860e5ced in KDevelop::DebugController::showStepInSource(QUrl const&, int) (this=0x55d7e2d11e50, url=..., lineNum=596) at ../kdevplatform/shell/debugcontroller.cpp:367
#38 0x00007fb0860e9376 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<QUrl const&, int>, void, void (KDevelop::DebugController::*)(QUrl const&, int)>::call(void (KDevelop::DebugController::*)(QUrl const&, int), KDevelop::DebugController*, void**) (f=(void (KDevelop::DebugController::*)(KDevelop::DebugController * const, const QUrl &, int)) 0x7fb0860e5b06 <KDevelop::DebugController::showStepInSource(QUrl const&, int)>, o=0x55d7e2d11e50, arg=0x7ffd52ac88e0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#39 0x00007fb0860e8efa in QtPrivate::FunctionPointer<void (KDevelop::DebugController::*)(QUrl const&, int)>::call<QtPrivate::List<QUrl const&, int>, void>(void (KDevelop::DebugController::*)(QUrl const&, int), KDevelop::DebugController*, void**) (f=(void (KDevelop::DebugController::*)(KDevelop::DebugController * const, const QUrl &, int)) 0x7fb0860e5b06 <KDevelop::DebugController::showStepInSource(QUrl const&, int)>, o=0x55d7e2d11e50, arg=0x7ffd52ac88e0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#40 0x00007fb0860e89e4 in QtPrivate::QSlotObject<void (KDevelop::DebugController::*)(QUrl const&, int), QtPrivate::List<QUrl const&, int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x55d7ff863c30, r=0x55d7e2d11e50, a=0x7ffd52ac88e0, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#41 0x00007fb082279a26 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffd52ac88e0, r=0x55d7e2d11e50, this=0x55d7ff863c30) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#42 doActivate<false>(QObject*, int, void**) (sender=0x55d7f77699a0, signal_index=4, argv=0x7ffd52ac88e0) at kernel/qobject.cpp:3886
#43 0x00007fb081a1fce1 in KDevelop::IDebugSession::showStepInSource(QUrl const&, int, QString const&) (this=0x55d7f77699a0, _t1=..., _t2=596, _t3=...) at kdevplatform/debugger/KDevPlatformDebugger_autogen/include/moc_idebugsession.cpp:295
#44 0x00007fb081a1f466 in KDevelop::IDebugSession::setCurrentPosition(QUrl const&, int, QString const&) (this=0x55d7f77699a0, url=..., line=596, addr=...) at ../kdevplatform/debugger/interfaces/idebugsession.cpp:110
#45 0x00007fb0174feccf in KDevMI::MIDebugSession::slotInferiorStopped(KDevMI::MI::AsyncRecord const&) (this=0x55d7f77699a0, r=...) at ../plugins/debuggercommon/midebugsession.cpp:1077
#46 0x00007fb017504ad4 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<KDevMI::MI::AsyncRecord const&>, void, void (KDevMI::MIDebugSession::*)(KDevMI::MI::AsyncRecord const&)>::call(void (KDevMI::MIDebugSession::*)(KDevMI::MI::AsyncRecord const&), KDevMI::MIDebugSession*, void**) (f=&virtual table offset 288, o=0x55d7f77699a0, arg=0x7ffd52ac8c20) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#47 0x00007fb017504214 in QtPrivate::FunctionPointer<void (KDevMI::MIDebugSession::*)(KDevMI::MI::AsyncRecord const&)>::call<QtPrivate::List<KDevMI::MI::AsyncRecord const&>, void>(void (KDevMI::MIDebugSession::*)(KDevMI::MI::AsyncRecord const&), KDevMI::MIDebugSession*, void**) (f=&virtual table offset 288, o=0x55d7f77699a0, arg=0x7ffd52ac8c20) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#48 0x00007fb017503a94 in QtPrivate::QSlotObject<void (KDevMI::MIDebugSession::*)(KDevMI::MI::AsyncRecord const&), QtPrivate::List<KDevMI::MI::AsyncRecord const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x55d812ee4670, r=0x55d7f77699a0, a=0x7ffd52ac8c20, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#49 0x00007fb082279a26 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffd52ac8c20, r=0x55d7f77699a0, this=0x55d812ee4670) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#50 doActivate<false>(QObject*, int, void**) (sender=0x55d812e4a240, signal_index=5, argv=0x7ffd52ac8c20) at kernel/qobject.cpp:3886
#51 0x00007fb0174e9ab2 in KDevMI::MIDebugger::programStopped(KDevMI::MI::AsyncRecord const&) (this=0x55d812e4a240, _t1=...) at plugins/debuggercommon/kdevdebuggercommon_autogen/EWIEGA46WW/moc_midebugger.cpp:295
#52 0x00007fb0174f4b31 in KDevMI::MIDebugger::processLine(QByteArray const&) (this=0x55d812e4a240, line=...) at ../plugins/debuggercommon/midebugger.cpp:273
#53 0x00007fb0174f3b88 in KDevMI::MIDebugger::readyReadStandardOutput() (this=0x55d812e4a240) at ../plugins/debuggercommon/midebugger.cpp:157
#54 0x00007fb0174f74a5 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (KDevMI::MIDebugger::*)()>::call(void (KDevMI::MIDebugger::*)(), KDevMI::MIDebugger*, void**) (f=(void (KDevMI::MIDebugger::*)(KDevMI::MIDebugger * const)) 0x7fb0174f393a <KDevMI::MIDebugger::readyReadStandardOutput()>, o=0x55d812e4a240, arg=0x7ffd52ac9120) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#55 0x00007fb0174f7090 in QtPrivate::FunctionPointer<void (KDevMI::MIDebugger::*)()>::call<QtPrivate::List<>, void>(void (KDevMI::MIDebugger::*)(), KDevMI::MIDebugger*, void**) (f=(void (KDevMI::MIDebugger::*)(KDevMI::MIDebugger * const)) 0x7fb0174f393a <KDevMI::MIDebugger::readyReadStandardOutput()>, o=0x55d812e4a240, arg=0x7ffd52ac9120) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#56 0x00007fb0174f6b12 in QtPrivate::QSlotObject<void (KDevMI::MIDebugger::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x55d7f5e6a2a0, r=0x55d812e4a240, a=0x7ffd52ac9120, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#57 0x00007fb082279a26 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffd52ac9120, r=0x55d812e4a240, this=0x55d7f5e6a2a0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#58 doActivate<false>(QObject*, int, void**) (sender=0x55d812ee3c90, signal_index=15, argv=argv@entry=0x7ffd52ac9120) at kernel/qobject.cpp:3886
#59 0x00007fb082272bc0 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=<optimized out>, m=m@entry=0x7fb0824d6da0 <QProcess::staticMetaObject>, local_signal_index=local_signal_index@entry=6, argv=argv@entry=0x7ffd52ac9120) at kernel/qobject.cpp:3946
#60 0x00007fb0821ae30e in QProcess::readyReadStandardOutput(QProcess::QPrivateSignal) (this=<optimized out>, _t1=...) at .moc/moc_qprocess.cpp:367
#61 0x00007fb0821b3a56 in QProcessPrivate::tryReadFromChannel(QProcessPrivate::Channel*) (this=0x55d812dae350, channel=0x55d812dae460) at io/qprocess.cpp:1057
#62 0x00007fb0821b3fb5 in QProcessPrivate::_q_canReadStandardError() (this=<optimized out>) at io/qprocess.cpp:1084
#63 QProcess::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=0x7ffd52ac92d0) at .moc/moc_qprocess.cpp:210
#64 0x00007fb082279a60 in doActivate<false>(QObject*, int, void**) (sender=0x55d812ee4a40, signal_index=3, argv=argv@entry=0x7ffd52ac92d0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:395
#65 0x00007fb082272bc0 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x55d812ee4a40, m=m@entry=0x7fb0824d9180 <QSocketNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffd52ac92d0) at kernel/qobject.cpp:3946
#66 0x00007fb08227cf90 in QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) (this=this@entry=0x55d812ee4a40, _t1=..., _t2=<optimized out>, _t3=...) at .moc/moc_qsocketnotifier.cpp:178
#67 0x00007fb08227d79d in QSocketNotifier::event(QEvent*) (this=0x55d812ee4a40, e=0x7ffd52ac93e0) at kernel/qsocketnotifier.cpp:302
#68 0x00007fb0830cd702 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x55d812ee4a40, e=0x7ffd52ac93e0) at kernel/qapplication.cpp:3671
#69 0x00007fb0822427ba in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x55d812ee4a40, event=0x7ffd52ac93e0) at ../../include/QtCore/5.15.0/QtCore/private/../../../../../src/corelib/thread/qthread_p.h:325
#70 0x00007fb08229bf46 in socketNotifierSourceDispatch(GSource*, GSourceFunc, gpointer) (source=0x55d7e21b8ef0) at kernel/qeventdispatcher_glib.cpp:107
#71 0x00007fb07e60143c in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#72 0x00007fb07e64f1d9 in  () at /usr/lib/libglib-2.0.so.0
#73 0x00007fb07e600221 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#74 0x00007fb08229b3a2 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x55d7e210b9f0, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#75 0x00007fb084e41e39 in KDevelop::BackgroundParser::waitForIdle() const (this=0x55d7e2c90c10) at ../kdevplatform/language/backgroundparser/backgroundparser.cpp:889
#76 0x00007fb086052168 in KDevelop::Core::cleanup() (this=0x55d7e2775e50) at ../kdevplatform/shell/core.cpp:387
#77 0x00007fb086051e22 in KDevelop::Core::shutdown() (this=0x55d7e2775e50) at ../kdevplatform/shell/core.cpp:344
#78 0x00007fb08602cb2f in KDevelop::MainWindow::~MainWindow() (this=0x55d7e2793780, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at ../kdevplatform/shell/mainwindow.cpp:150
#79 0x00007fb08602cbf0 in KDevelop::MainWindow::~MainWindow() (this=0x55d7e2793780, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at ../kdevplatform/shell/mainwindow.cpp:154
#80 0x00007fb08226ef90 in QObject::event(QEvent*) (this=0x55d7e2793780, e=0x55d808e50770) at kernel/qobject.cpp:1301
#81 0x00007fb083d0ea8a in KXmlGuiWindow::event(QEvent*) () at /usr/lib/libKF5XmlGui.so.5
#82 0x00007fb08602d0f7 in KDevelop::MainWindow::event(QEvent*) (this=0x55d7e2793780, ev=0x55d808e50770) at ../kdevplatform/shell/mainwindow.cpp:208
#83 0x00007fb0830cd702 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x55d7e2793780, e=0x55d808e50770) at kernel/qapplication.cpp:3671
#84 0x00007fb0822427ba in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x55d7e2793780, event=0x55d808e50770) at ../../include/QtCore/5.15.0/QtCore/private/../../../../../src/corelib/thread/qthread_p.h:325
#85 0x00007fb0822452a3 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (receiver=0x0, event_type=0, data=0x55d7e20f7090) at kernel/qcoreapplication.cpp:1815
#86 0x00007fb08229bcf4 in postEventSourceDispatch(GSource*, GSourceFunc, gpointer) (s=0x55d7e21c9b50) at kernel/qeventdispatcher_glib.cpp:277
#87 0x00007fb07e60143c in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#88 0x00007fb07e64f1d9 in  () at /usr/lib/libglib-2.0.so.0
#89 0x00007fb07e600221 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#90 0x00007fb08229b331 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x55d7e210b9f0, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#91 0x00007fb08224113c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffd52ac9b50, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:141
#92 0x00007fb0822495c4 in QCoreApplication::exec() () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#93 0x000055d7e1e0881f in main(int, char**) (argc=3, argv=0x7ffd52ac9fc8) at ../app/main.cpp:850
[Inferior 1 (process 169501) detached]

BACKTRACE 2 (Debug) [This backtrace was obtained by commenting out a Q_ASSERT at the beginning of BreakpointModel::setupMovingCursor() so as not to trigger the crash described by BACKTRACE 1]
Application: KDevelop (kdevelop), signal: Segmentation fault

[KCrash Handler]
#4  KDevelop::SourceFormatterController::configForUrl(QUrl const&) const (this=0x5655347226b0, url=...) at ../kdevplatform/shell/sourceformattercontroller.cpp:324
#5  0x00007fa8ec8f9191 in KDevelop::SourceFormatterController::formatterForUrl(QUrl const&, QMimeType const&) (this=0x5655347226b0, url=..., mime=...) at ../kdevplatform/shell/sourceformattercontroller.cpp:400
#6  0x00007fa8ec8f7cff in KDevelop::SourceFormatterController::documentLoaded(QPointer<KDevelop::TextDocument> const&) (this=0x5655347226b0, doc=...) at ../kdevplatform/shell/sourceformattercontroller.cpp:223
#7  0x00007fa8ec834057 in KDevelop::SourceFormatterController::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x5655347226b0, _c=QMetaObject::InvokeMetaMethod, _id=6, _a=0x565563466598) at kdevplatform/shell/KDevPlatformShell_autogen/EWIEGA46WW/moc_sourceformattercontroller.cpp:125
#8  0x00007fa8e8a9d1d2 in QObject::event(QEvent*) (this=0x5655347226b0, e=0x565563466550) at kernel/qobject.cpp:1314
#9  0x00007fa8e98fb702 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x5655347226b0, e=0x565563466550) at kernel/qapplication.cpp:3671
#10 0x00007fa8e8a707ba in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x5655347226b0, event=0x565563466550) at ../../include/QtCore/5.15.0/QtCore/private/../../../../../src/corelib/thread/qthread_p.h:325
#11 0x00007fa8e8a732a3 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (receiver=0x0, event_type=0, data=0x565533bec090) at kernel/qcoreapplication.cpp:1815
#12 0x00007fa8e8ac9cf4 in postEventSourceDispatch(GSource*, GSourceFunc, gpointer) (s=0x565533cbeff0) at kernel/qeventdispatcher_glib.cpp:277
#13 0x00007fa8e4e2f43c in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#14 0x00007fa8e4e7d1d9 in  () at /usr/lib/libglib-2.0.so.0
#15 0x00007fa8e4e2e221 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#16 0x00007fa8e8ac9331 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x565533c009f0, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#17 0x00007fa8e8a6f13c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffedcfd93f0, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:141
#18 0x00007fa8e8a775c4 in QCoreApplication::exec() () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#19 0x0000565531bfc81f in main(int, char**) (argc=3, argv=0x7ffedcfd9868) at ../app/main.cpp:850
[Inferior 1 (process 172229) detached]
Comment 1 Francis Herne 2020-09-10 14:41:11 UTC
*** Bug 426371 has been marked as a duplicate of this bug. ***
Comment 2 Igor Kushnir 2020-10-16 14:39:19 UTC
Git commit 300ea0143f4dcf5537cac824e823bee1ce6077fc by Igor Kushnir.
Committed on 15/10/2020 at 15:26.
Pushed by igorkushnir into branch '5.6'.

Do not open documents after DocumentController::cleanup()

For now d->shuttingDown is checked in just one of many
DocumentController::openDocument() overloads and alternatives, because
this is the only overload that is known to be called after cleanup() and
cause crashes. If similar crashes happen because of other ways of
opening a document, the check can be moved or reused elsewhere.
Or perhaps a different strategy will be needed to fix these hypothetical
future crashes: e.g. simply returning nullptr doesn't work if the caller
dereferences the returned document pointer without checking.
FIXED-IN: 5.6.1

M  +17   -0    kdevplatform/shell/documentcontroller.cpp

https://invent.kde.org/kdevelop/kdevelop/commit/300ea0143f4dcf5537cac824e823bee1ce6077fc