Bug 268734

Summary: When the information length is not enough, DrKonqi should explain why
Product: [Applications] drkonqi Reporter: rosenfield.albert
Component: generalAssignee: Dario Andres <andresbajotierra>
Status: RESOLVED FIXED    
Severity: major CC: andresbajotierra, mail
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Ubuntu   
OS: Linux   
Latest Commit: Version Fixed In:

Description rosenfield.albert 2011-03-17 10:44:28 UTC
Version:           unspecified (using KDE 4.5.1) 
OS:                Linux

The Crash Reporting Assistant is insanely annoying.

It *always* refuses to work, stating that "the report does not contain enough information".

It *always* refuses to work AFTER forcing the user to first click through a shitload of wizard dialogs.  Why not report the problem right away?  Or just not show up?

(It's not like it's helpful to pop up, say "Hi! Let me guide you through all these steps.. here.. enter information here.. click here.. and here.. yeah, sorry, I'm not going to do shit with all the information you just spent time entering. Haha. Stupid user.)

It *never* tells the user how the CRA thinks that a crash report good enough for it's majestetical needs could be created.

(I've gone to Google to look for answers. The best I could find was "install gdb", which I already have.)

Here's a crash report which it refuses to report to KDE, of course this is just an example.

============== EXAMPLE ================

Application: plasma-desktop (0.3)
KDE Platform Version: 4.5.1 (KDE 4.5.1)
Qt Version: 4.7.0
Operating System: Linux 2.6.35-27-generic x86_64
Distribution: Ubuntu 10.10

-- Information about the crash:
Clicked the PackageKit upgrade notification icon while it was working.  By chance, clicked it almost exactly at the same time that it popped up it's hovering info box.

-- Backtrace:
Application: Plasma Workspace (plasma-desktop), signal: Segmentation fault
[Current thread is 1 (Thread 0x7fd73f889780 (LWP 2260))]

Thread 2 (Thread 0x7fd71e630700 (LWP 2264)):
#0  0x00007fd73f19e203 in poll () from /lib/libc.so.6
#1  0x00007fd733e1c009 in ?? () from /lib/libglib-2.0.so.0
#2  0x00007fd733e1c45c in g_main_context_iteration () from /lib/libglib-2.0.so.0
#3  0x00007fd73c8531e6 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#4  0x00007fd73c825a02 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#5  0x00007fd73c825dec in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#6  0x00007fd73c7302fd in QThread::exec() () from /usr/lib/libQtCore.so.4
#7  0x00007fd73c8055f8 in ?? () from /usr/lib/libQtCore.so.4
#8  0x00007fd73c73327e in ?? () from /usr/lib/libQtCore.so.4
#9  0x00007fd73c4a8971 in start_thread () from /lib/libpthread.so.0
#10 0x00007fd73f1aa92d in clone () from /lib/libc.so.6
#11 0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7fd73f889780 (LWP 2260)):
[KCrash Handler]
#6  0x00007fd73cef7304 in KJob::isAutoDelete() const () from /usr/lib/libkdecore.so.5
#7  0x00007fd73cef79b8 in KJob::emitResult() () from /usr/lib/libkdecore.so.5
#8  0x00007fd721c73c73 in ?? () from /usr/lib/kde4/plasma_engine_statusnotifieritem.so
#9  0x00007fd721c73ce0 in ?? () from /usr/lib/kde4/plasma_engine_statusnotifieritem.so
#10 0x00007fd73c83eb27 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#11 0x00007fd721c6dc7f in ?? () from /usr/lib/kde4/plasma_engine_statusnotifieritem.so
#12 0x00007fd721c72be4 in ?? () from /usr/lib/kde4/plasma_engine_statusnotifieritem.so
#13 0x00007fd73c83eb27 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#14 0x00007fd73514189c in DBusMenuImporter::slotMenuAboutToShow() () from /usr/lib/libdbusmenu-qt.so.2
#15 0x00007fd735142a5c in DBusMenuImporter::qt_metacall(QMetaObject::Call, int, void**) () from /usr/lib/libdbusmenu-qt.so.2
#16 0x00007fd73c83eb27 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#17 0x00007fd73bdd6f40 in QMenu::qt_metacall(QMetaObject::Call, int, void**) () from /usr/lib/libQtGui.so.4
#18 0x00007fd73c82fbf9 in QMetaMethod::invoke(QObject*, Qt::ConnectionType, QGenericReturnArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument) const () from /usr/lib/libQtCore.so.4
#19 0x00007fd73c831306 in QMetaObject::invokeMethod(QObject*, char const*, Qt::ConnectionType, QGenericReturnArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument, QGenericArgument) () from /usr/lib/libQtCore.so.4
#20 0x00007fd73513c7c1 in DBusMenuImporter::updateMenu() () from /usr/lib/libdbusmenu-qt.so.2
#21 0x00007fd721c6f1bb in ?? () from /usr/lib/kde4/plasma_engine_statusnotifieritem.so
#22 0x00007fd721c752d8 in ?? () from /usr/lib/kde4/plasma_engine_statusnotifieritem.so
#23 0x00007fd73ed77b21 in Plasma::ServiceJob::qt_metacall(QMetaObject::Call, int, void**) () from /usr/lib/libplasma.so.3
#24 0x00007fd721c73cc0 in ?? () from /usr/lib/kde4/plasma_engine_statusnotifieritem.so
#25 0x00007fd73c838bde in QObject::event(QEvent*) () from /usr/lib/libQtCore.so.4
#26 0x00007fd73b970fdc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#27 0x00007fd73b976aed in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#28 0x00007fd73d4c2156 in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5
#29 0x00007fd73c826cdc in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4
#30 0x00007fd73c829c22 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQtCore.so.4
#31 0x00007fd73c853653 in ?? () from /usr/lib/libQtCore.so.4
#32 0x00007fd733e18342 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#33 0x00007fd733e1c2a8 in ?? () from /lib/libglib-2.0.so.0
#34 0x00007fd733e1c45c in g_main_context_iteration () from /lib/libglib-2.0.so.0
#35 0x00007fd73c853193 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#36 0x00007fd73ba23a4e in ?? () from /usr/lib/libQtGui.so.4
#37 0x00007fd73c825a02 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#38 0x00007fd73c825dec in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#39 0x00007fd73c829ebb in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4
#40 0x00007fd73f481a56 in kdemain () from /usr/lib/kde4/libkdeinit/libkdeinit4_plasma-desktop.so
#41 0x00007fd73f0e2d8e in __libc_start_main () from /lib/libc.so.6
#42 0x0000000000400669 in _start ()

==============================================

Pretty please, fix this.


Reproducible: Always

Steps to Reproduce:
1) Crash a KDE application, say the Plasma workspace for example.
2) Wait for the Crash Reporting Assistant.
3) Get some coffee, act patient and remember that it's for the common good to report issues to KDE, while you let CRA guide you through a bunch of steps.  It can take half an hour, but remember it's for the common good.
4) Get pissed off as CRA refuses to send the report at the very last moment, when you've been through the entire mill.


Actual Results:  
Nothing.

Expected Results:  
A bug report, however useless it may be (guess it is always useful for statistics over EIP crash addresses if nothing else, for God's sake), sent to KDE.
Comment 1 Dario Andres 2011-03-17 11:30:21 UTC
1) You are missing debug symbols (which are needed to have a complete backtrace). For that backtrace you would need to install the following packages: "kdelibs-dbg" , "kdebase-workspace-dbg", "libqt4-dbg"

2) The crash you reported is alredy fixed in KDE SC 4.6.0 and later: bug 241562

3) We don't use bug reports for statistics. We receive a lot of them already and we lack manpower even to organize them. So there is even less manpower to process the reports and fix the real bugs.... We needed a way to filter some reports out (those with incomplete backtrace, or not long enough descriptions)
We can't accept reports with some kind of context information. So if we want a straight-forward reporting process we need lots of people to process that information later. 

4) There are different stages when the reporting assistant prompts for information and later tells you that it is not enought. After you fill the initial checkboxes and the backtrace is generates, the dialog tells you (In the "conclusions" page) if it is worth reporting or not; and it *explains* why.

If it is worth reporting and you keep going, then you have to add some context information; in this step the ammount of information you need to enter is proportional to the quality of the backtrace. Example:
- If the backtrace is perfect, you need to enter a minimal ammount of characters
- If the backtrace is mostly missing or incomplete, you need to enter more information.

Currently the limits are based on characters ammount because we didn't implement other smarter way to detect if the user information is useful or just random characters without sense... or whatever.

I guess we could try to explain that in the dialog itself.

I'm sorry that you lost part of your time and got mad at us.
Look at the good side: this crash is already fixed.

Additionally, DrKonqi on KDE SC 4.7 will show you (in the duplicates page) which bugs are already fixed, and in which version. So in this case you will see the duplicates that are fixed for "KDE SC 4.6.0", and considering you are using 4.5.1, you will avoid reporting the issue over again.

I hope that explains the situation better. And if you have some other ideas on how to improve the DrKonqi workflow or improve the "friendliness" of the interface, without generating more work for the KDE bug triagers and developers, you are welcome to tell us about them.

Regards
DarĂ­o A. (former DrKonqi developer)
Comment 2 Dario Andres 2011-03-17 11:35:54 UTC
In 3) it should be "We can't accept reports withOUT some kind of context information."

Also, about the minimal required information length and the backtrace usefulness:
If a backtrace is incomplete, the developers can't really look into it to check what happened, or what was the state of the components of the application, or where the error did come from; that is why a more helpful/long explanation is needed: in order to try to "reproduce"(repeat) the issue themselves and debug the application
Comment 3 Dario Andres 2011-04-23 14:50:07 UTC
Simple proposed patch: https://git.reviewboard.kde.org/r/101203
Comment 4 George Kiagiadakis 2011-04-29 15:39:28 UTC
Git commit ca664d7e584c5e6561a0637ab5507a5071b95149 by George Kiagiadakis, on behalf of Dario Andres Rodriguez.
Committed on 29/04/2011 at 14:14.
Pushed by gkiagia into branch 'master'.

Add more explanations about why DrKonqi requires certain amount of characters in the bug description.

Tells the user that the required information is proportional to other information,
such as the backtrace or the reproducibility rate. Also, check and tell the user
if he/she has previously selected that they could provide some contextual information.
Additionally add some line breaks to make it easier to read.

REVIEW: 101203
BUG: 268734

M  +16   -2    drkonqi/reportassistantpages_bugzilla.cpp     

http://commits.kde.org/kde-runtime/ca664d7e584c5e6561a0637ab5507a5071b95149