> On July 27, 2014, 1:17 p.m., Thomas Lübking wrote:
> > drkonqi/gdbhighlighter.cpp, line 74
> > <https://git.reviewboard.kde.org/r/119498/diff/1/?file=293510#file293510line74>
> >
> >     an abort is not a crash ;-)
> >     
> >     If you hit this assert, the looked up (lineNr - 1) is somehow out of 
> > bounds, ie. there's no line with a key >= (lineNr -1) in the map.
> >     
> >     This should likely never happen on any system.
> >     Can you check what the lineNr actually is as compared to
> >     
> >        qDebug() << lineNr << lines.keys();
> >        
> >     ?
> 
> Ian Wadham wrote:
>     I did at one time have a few qDebug() statements to try and find what was 
> wrong with the algorithm. AFAICT it is trying to match one or more lines in 
> (const QString& text) with single (possibly long) lines of backtrace in 
> QMap<int, BacktraceLine>. I think it failed if one backtrace line was 
> formatted into three text lines or maybe if the last backtrace line was 
> formatted into two text lines. AFAICT (there is a real dearth of explanatory 
> comments) the code is merely introducing pretty colours, etc. into the 
> formatted text. As such, it should not abort Dr Konqi and lose the crash 
> report.
> 
> Thomas Lübking wrote:
>     Of course it should not crash.
>     
>     The point is that the assert explicitly tells you that there's something 
> wrong with the code.
>     Skippping it won't fix the issu - that's like puting duct tape over a 
> warning sign on your cars dashboard to fix "no cooling water".
>     
>     
>     Since the lines map seems only used to map lines to textblocks, i assume 
> the issue is that the lines are eg. not "\n" terminated in gdb output on OSX 
> (no idea, though) and the only item in the map is that for the key "0"
>     
>     In this case that'd be the issue to fix.
> 
> Ian Wadham wrote:
>     Please spare me the motoring analogies. To me, the ASSERT at this point, 
> is like bringing the car to a screeching halt or running it into the nearest 
> fence, simply because the glovebox light will not come on. I am a real-time 
> and O/S programmer from way back and have designed and written a few crash 
> procedures for different systems. They need to be rugged and simple (unlike 
> Dr Konqi IMHO) and to succeed no matter what. This used to be called failsafe 
> programming, graceful failure or graceful degradation. If an ASSERT and abort 
> technique has to be used in RT programming, to prevent potential database 
> corruption, it needs to be backed by an appropriate recovery and restart 
> procedure.
>     
>     Actually I think lines.end() is a legitimate return from 
> lines.lowerBound(lineNr - 1) in Dr K's algorithm (see 
> http://qt-project.org/doc/qt-5/qmap.html#lowerBound coding examples). The 
> lineNr can actually get ahead of the number of lines in the map by by too 
> much, if there are several multi-line entries in QString& text. Using an 
> ASSERT looks like lazy programming to me (Thinks: "I cannot see what to do in 
> this case, so I'll put in an ASSERT and see if it actually happens in 
> practice." ???). My solution is to re-use the last entry from the QMap. 
> Another might be to use "return;" instead of the ASSERT, leaving the last bit 
> of the highlighting incomplete, but not losing the valuable backtrace data.
>     
>     A better (more rugged) approach might be:
>     
>         get a line from "text"
>         if it is from the left-hand end of a backtrace entry (i.e. not a 
> continuation line)
>             get the next backtrace entry
>             if past last entry
>                 return
>         re-format the line from "text"
>     
>     I would have used something like that in my patch, but I do not know 
> enough about the format of backtrace data to get the first "if" condition 
> right. How would I?
>     
>     Re "\n" characters, they occur as expected in the content of "QString& 
> text" on Apple OS X.

If it walks and talks like a crash ... we should not end up in the discussion 
deadlock I once had with my boss who claimed embedded code cannot crash 
(because there's no OS or whatelse to replace the application code).

Anyway, I like Ian's suggestion to just return to the caller instead of 
exitting (and I concur with his lazy programming analysis).

So if I understood correctly, DrKonqi does some reformatting of the backtrace 
before including it for upload with the bug report. What I haven't understood 
is how important this reformatting is. Could it be a thought to cancel the 
reformating procedure and return with the raw text, instead of with a partly 
formated text, when the assert condition triggers?


About processing backtraces: recent OS X versions use lldb instead of gdb. How 
have you tackled that, Ian - added a dependency on port:gdb ?


- RJVB


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/119498/#review63254
-----------------------------------------------------------


On July 27, 2014, 11:16 a.m., Ian Wadham wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/119498/
> -----------------------------------------------------------
> 
> (Updated July 27, 2014, 11:16 a.m.)
> 
> 
> Review request for KDE Software on Mac OS X, KDE Runtime, kdelibs, and 
> Michael Pyne.
> 
> 
> Repository: kde-runtime
> 
> 
> Description
> -------
> 
> When a KDE app crashes in Apple OS X, it just disappears from the screen. At 
> the most, the user is invited to report the crash to Apple. AFAIK this has 
> been a problem in KDE on Apple OS X for years, leading to frustration with 
> KDE among Apple users and MacPorts developers and an attitude among KDE 
> developers of "Why does nobody report the problem(s) on bugs.kde.org?"
> 
> It is my strong belief that the failure to report crashes of KDE apps in 
> Apple OS X also exists in Frameworks.
> 
> So far I have identified a number of portability bugs in KDE on Apple OS X: 1 
> in KCrash, 1 in kdeinit4 and 5 in Dr Konqi. Three patches for Dr Konqi are 
> submitted in this review. Patches for KCrash and kdeinit4 are submitted in 
> part 1 of this review, against kdelibs. I am still investigating the other 
> two problems in Dr Konqi - and there could be more than two...
> 
> In this review we have three portability problems:
> 
> 1. On Apple OS X, Dr Konqi's dialog box hides itself underneath the main 
> window of the app that has just crashed, so is effectively useless. This 
> appears to be because Dr Konqi is started by a Linux/Unix method (fork() + 
> exec()?). If an app is started with the Apple OS X "open" command, it always 
> appears on top. The patch just raises the dialog box.
> 
> 2. When formatting the backtrace output, Dr Konqi crashes (with an ASSERT) on 
> the last line. This appears to be an error in the algorithm used (i.e. also a 
> bug in Linux KDE), but the patch is treating it as an Apple OS X portability 
> problem for now.
> 
> 3. Dr Konqi checks whether the user can save cookies in kcookiejar and, if 
> not, stops reporting the crash. On Apple OS X, cookies would be kept in 
> another browser (e.g. Safari or Firefox) and not in KDE's default browser 
> (Konqueror) and cookie jar. IMHO, Dr K should report the crash no matter 
> what, as long as it can connect to bugs.kde.org and log in.
> 
> 
> Diffs
> -----
> 
>   drkonqi/reportassistantpages_bugzilla.cpp 86ca327 
>   drkonqi/gdbhighlighter.cpp 7cd0aa9 
>   drkonqi/main.cpp 75e060e 
> 
> Diff: https://git.reviewboard.kde.org/r/119498/diff/
> 
> 
> Testing
> -------
> 
> Using Apple OS X 10.7.5 (Lion) on a MacBook Pro, I have installed KDE libs 
> via MacPorts (at version 4.12.5) and I have adapted kdesrc-build to run in an 
> Apple OS X environment and used it to test against the KDE 4.13 branch. I 
> have been testing with a KDE app that I can crash at will and using stderr 
> and Apple OS X Console log output to determine the outcome.
> 
> Please note that I am the -only- KDE developer who has this kind of setup, 
> but I am NOT a KDE core developer. My experience before now has been in KDE 
> Games. However I used to be a UNIX and database guru before I retired in 1998.
> 
> I NEED HELP from KDE -core- developers to proceed further. These problems 
> will also exist in Dr Konqi for KF 5, but I am as yet unable to build or test 
> Frameworks on Apple OS X and I cannot find Dr Konqi among the Frameworks 
> repositories. I am sure there are many more Apple OS X portability problems 
> in Dr Konqi and other KDE software.
> 
> Without my patches, Dr Konqi, on Apple OS X, remains invisible to the user, 
> often fails to complete the backtrace report and then fails to connect to 
> bugs.kde.org.
> 
> With my patches, Dr Konqi on Apple OS X can generate a full crash report, 
> including the backtrace and the results of the dialog with the user. 
> Sometimes, however, it fails to submit the completed report to bugs.kde.org. 
> This problem is still under investigation.
> 
> I would not have got this far without help from Michael Pyne, Thomas Lübking 
> and several of the MacPorts developers, as well as the unfailing enthusiasm 
> and encouragement of my friend Marko Käning.
> 
> 
> Thanks,
> 
> Ian Wadham
> 
>

Reply via email to