Bug 355159

Summary: CRASH in KDevelop::VariableToolTip::slotLinkActivated(QString const&) ... at /home/piotr/kf5/src/kdevplatform/debugger/variable/variabletooltip.cpp:185
Product: [Applications] kdevelop Reporter: Piotr Mierzwinski <piotr.mierzwinski>
Component: CPP DebuggerAssignee: kdevelop-bugs-null
Status: RESOLVED FIXED    
Severity: crash CC: aspotashev, kfunk, niko.sams, piotr.mierzwinski
Priority: NOR Keywords: regression, release_blocker
Version First Reported In: git master   
Target Milestone: 5.0.0   
Platform: Mageia RPMs   
OS: Linux   
Latest Commit: Version Fixed/Implemented In: 5.0.0
Sentry Crash Report:
Attachments: gdb full log from kdevelop debug session when crash was happened
gdb full log for Crash

Description Piotr Mierzwinski 2015-11-10 23:06:53 UTC
During debug session KDevelop crashed (immediately disappeared). Action that I've done before was try of adding global variable by move cursor over variable and selecting "Watch this".
Before I was walking through the code by "Step over" function. Mentioned variable has been set in one of last step. In Variable view "Local" wasn't unfolded.
The crash I reproduced twice.
Most interesting part please find below:

Thread 1 (Thread 0xaf1509c0 (LWP 17976)):
#0  0xffffffff in __dynamic_cast () at /usr/lib/libstdc++.so.6
#1  0xffffffff in KDevelop::VariableToolTip::slotLinkActivated(QString const&) (this=0x9961880, link=...) at /home/piotr/kf5/src/kdevplatform/debugger/variable/variabletooltip.cpp:185
#2  0xffffffff in QtPrivate::QSlotObject<void (KDevelop::VariableToolTip::*)(QString const&), QtPrivate::List<QString const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (arg=0xbfffdc48, o=0x9961880, f=<optimized out>) at /usr/lib/qt5/include/QtCore/qobjectdefs_impl.h:501
#3  0xffffffff in QtPrivate::QSlotObject<void (KDevelop::VariableToolTip::*)(QString const&), QtPrivate::List<QString const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (arg=0xbfffdc48, o=0x9961880, f=<optimized out>) at /usr/lib/qt5/include/QtCore/qobjectdefs_impl.h:520
#4  0xffffffff in QtPrivate::QSlotObject<void (KDevelop::VariableToolTip::*)(QString const&), QtPrivate::List<QString const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x99eab08, r=0x9961880, a=0xbfffdc48, ret=0x0) at /usr/lib/qt5/include/QtCore/qobject_impl.h:143
#5  0xffffffff in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/sse2/libQt5Core.so.5
#6  0xffffffff in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () at /usr/lib/sse2/libQt5Core.so.5
#7  0xffffffff in QSignalMapper::mapped(QString const&) () at /usr/lib/sse2/libQt5Core.so.5
#8  0xffffffff in QSignalMapper::map(QObject*) () at /usr/lib/sse2/libQt5Core.so.5
#9  0xffffffff in QSignalMapper::map() () at /usr/lib/sse2/libQt5Core.so.5
#10 0xffffffff in QtPrivate::QSlotObject<void (QSignalMapper::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (arg=<optimized out>, o=0x8ba0070, f=<optimized out>) at /usr/lib/qt5/include/QtCore/qobjectdefs_impl.h:501
#11 0xffffffff in QtPrivate::QSlotObject<void (QSignalMapper::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (arg=<optimized out>, o=0x8ba0070, f=<optimized out>) at /usr/lib/qt5/include/QtCore/qobjectdefs_impl.h:520
#12 0xffffffff in QtPrivate::QSlotObject<void (QSignalMapper::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x9b960e0, r=0x8ba0070, a=0xbfffdde8, ret=0x0) at /usr/lib/qt5/include/QtCore/qobject_impl.h:143
#13 0xffffffff in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/sse2/libQt5Core.so.5
#14 0xffffffff in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () at /usr/lib/sse2/libQt5Core.so.5
#15 0xffffffff in QAbstractButton::clicked(bool) () at /usr/lib/libQt5Widgets.so.5
#16 0xffffffff in QAbstractButtonPrivate::emitClicked() () at /usr/lib/libQt5Widgets.so.5
#17 0xffffffff in QAbstractButtonPrivate::click() () at /usr/lib/libQt5Widgets.so.5
#18 0xffffffff in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () at /usr/lib/libQt5Widgets.so.5
#19 0xffffffff in QWidget::event(QEvent*) () at /usr/lib/libQt5Widgets.so.5
#20 0xffffffff in QAbstractButton::event(QEvent*) () at /usr/lib/libQt5Widgets.so.5
#21 0xffffffff in QPushButton::event(QEvent*) () at /usr/lib/libQt5Widgets.so.5
#22 0xffffffff in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#23 0xffffffff in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#24 0xffffffff in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib/sse2/libQt5Core.so.5
#25 0xffffffff in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /usr/lib/libQt5Widgets.so.5
#26 0xffffffff in QWidgetWindow::handleMouseEvent(QMouseEvent*) () at /usr/lib/libQt5Widgets.so.5
#27 0xffffffff in QWidgetWindow::event(QEvent*) () at /usr/lib/libQt5Widgets.so.5
#28 0xffffffff in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#29 0xffffffff in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#30 0xffffffff in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib/sse2/libQt5Core.so.5
#31 0xffffffff in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at /usr/lib/sse2/libQt5Gui.so.5
#32 0xffffffff in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /usr/lib/sse2/libQt5Gui.so.5
#33 0xffffffff in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/sse2/libQt5Gui.so.5
#34 0xffffffff in userEventSourceDispatch(_GSource*, int (*)(void*), void*) () at /usr/lib/libQt5XcbQpa.so.5
#35 0xffffffff in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#36 0xffffffff in g_main_context_iterate.isra () at /usr/lib/libglib-2.0.so.0
#37 0xffffffff in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#38 0xffffffff in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/sse2/libQt5Core.so.5
#39 0xffffffff in QPAEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5XcbQpa.so.5
#40 0xffffffff in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/sse2/libQt5Core.so.5
#41 0xffffffff in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/sse2/libQt5Core.so.5
#42 0xffffffff in QCoreApplication::exec() () at /usr/lib/sse2/libQt5Core.so.5
#43 0xffffffff in QGuiApplication::exec() () at /usr/lib/sse2/libQt5Gui.so.5
#44 0xffffffff in QApplication::exec() () at /usr/lib/libQt5Widgets.so.5
#45 0x08054df7 in main(int, char**) (argc=1, argv=0xbfffebc4) at /home/piotr/kf5/src/kdevelop/app/main.cpp:646

Reproducible: Always




KTextEditor, Kate, KDevplatform and KDevelop cloned at 2015-11-10
$ gdb --version
GNU gdb (GDB) 7.10-4.mga6 (Mageia release 6)

Full session in dbg attached.
Comment 1 Piotr Mierzwinski 2015-11-10 23:09:45 UTC
I did couple of tests more and turned out that...
Walking through the code by "Step over" function is not required to reproduce this crash. It's enough to set break point in code. And then try to add any variable by "Watch this".
I reproduced it 4 times.
Comment 2 Piotr Mierzwinski 2015-11-10 23:12:01 UTC
Created attachment 95425 [details]
gdb full log from kdevelop debug session when crash was happened
Comment 3 Piotr Mierzwinski 2015-12-02 20:53:38 UTC
Just for reminding...

It still happens in fresh KDevelop 5 (kdevelop and kdevplatform cloned at 30.11.2015)
This time I reproduced this bug on Kubuntu 15.10 using simple scenario described in "Comment 1".

KDevelop still crashed on the same line (184). 
Check: Thread 1 (Thread 0x7fffdd3c4800 (LWP 6735)):
I attached gdb full log.

The work around is copying variable name and paste it into Variable view.

Could anyone to confirm this issue and at a pinch fix it.
Comment 4 Piotr Mierzwinski 2015-12-02 20:54:28 UTC
Created attachment 95871 [details]
gdb full log for Crash
Comment 5 Piotr Mierzwinski 2016-01-31 21:11:01 UTC
Recently I discover one thing, maybe will be helpful. Namely, KDevelop beta1 (mentioned on your homesite and packaged in couple of distributions: KaOS, Mageia Cauldron) doesn't have this bug.
Comment 6 Kevin Funk 2016-03-15 17:33:45 UTC
Confirmed by multiple users.
Comment 7 Kevin Funk 2016-03-31 12:24:05 UTC
@Piotr: Care to have a look at this? And provide a patch?
Comment 8 Kevin Funk 2016-04-05 11:30:54 UTC
*** Bug 361407 has been marked as a duplicate of this bug. ***
Comment 9 Kevin Funk 2016-04-14 22:38:38 UTC
Git commit 69348b5ae656022bca02f911267d4c0e3d092f29 by Kevin Funk.
Committed on 14/04/2016 at 22:37.
Pushed by kfunk into branch '5.0'.

Use correct index when querying model
FIXED-IN: 5.0

M  +2    -1    debugger/variable/variabletooltip.cpp

http://commits.kde.org/kdevplatform/69348b5ae656022bca02f911267d4c0e3d092f29