Bug 316656

Summary: GDB crashes when creating catchpoint
Product: [Applications] kdevelop Reporter: Alex Richardson <arichardson.kde>
Component: CPP DebuggerAssignee: kdevelop-bugs-null
Status: RESOLVED UPSTREAM    
Severity: major CC: arjan, chaofeng111, ischdoepperdodrausse, niko.sams
Priority: NOR    
Version: git master   
Target Milestone: 4.3.0   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Alex Richardson 2013-03-13 10:56:32 UTC
I am using GNU gdb (GDB) SUSE (7.5.1-2.1.1)
Here is the contents of the GDB view:
gdb --interpreter=mi2 -quiet
(gdb) catch throw
catch throw
Catchpoint 2 (throw)
../../gdb/breakpoint.c:5816: internal-error: print_one_breakpoint_location: Assertion `b->loc == NULL || b->loc->next == NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) [answered Y; input not from terminal]
../../gdb/breakpoint.c:5816: internal-error: print_one_breakpoint_location: Assertion `b->loc == NULL || b->loc->next == NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Create a core file of GDB? (y or n) [answered Y; input not from terminal]

Reproducible: Always

Steps to Reproduce:
1. Debug a program
2. enter "catch throw" GDB console or have that line in .gdbinit

Actual Results:  
Crash


Works fine when I use gdb on the command line
Comment 1 Niko Sams 2013-03-13 20:15:00 UTC
if you try doing exactly the same with gdb on the commandline (including --interpreter=-mi2), does it also not crash?
Comment 2 Alex Richardson 2013-03-13 23:07:12 UTC
Interesting, when I run it using interpreter==-mi2 I get the following if the program is already running:
(gdb) 
catch throw
&"catch throw\n"
~"Catchpoint 7 (throw)\n"
Abgebrochen (Speicherabzug geschrieben)

If the process is not running yet I get the following:

(gdb) 
catch throw
&"catch throw\n"
~"Catchpoint 5 (throw)\n"
=breakpoint-created,bkpt={number="5",type="breakpoint",disp="keep",enabled="y",addr="0x000000000050e200",what="exception throw",times="0",original-location="__cxa_throw"}
^done
(gdb) 

However then it aborts before hitting main. Seems like it is an upstream bug, although I could swear it has worked before.
Comment 3 Arjan van Olphen 2013-03-28 11:18:46 UTC
I have this same bug (using Eclipse) only when having forked the process and the breakpoint is set on the child as well and only when I have added C++ object (cpp-file) added to the C project.
I not sure if something special is done when adding a C++ object during linking.

Hope this helps finding actual problem.
Comment 4 Heggman 2013-05-15 07:54:04 UTC
I can confirm this bug (of gdb), too. I use emacs/GUD.
The crash does not occur when setting the catch point but only when break points are displayed.
This happens with "gdb -i=mi" same way as with "gdb --fullname"
Comment 5 Heggman 2013-05-15 08:41:47 UTC
I created a bug report for this towards gdb 
http://sourceware.org/bugzilla/show_bug.cgi?id=13898
Comment 6 Heggman 2013-05-15 08:45:57 UTC
Sorry I referenced the wrong bug. The right one is
http://sourceware.org/bugzilla/show_bug.cgi?id=15468
Comment 7 Kevin Funk 2013-05-16 17:39:57 UTC
Can we close as upstream bug, then?
Comment 8 Heggman 2013-05-18 00:21:04 UTC
From my point of view: yes.

Remark: Workaround is to use "break __cxa_throw" instead of "catch throw"