System: Athlon Linux 2.2.16 (SuSE 6.4 distribution)
Compiler: GCC 2.95.2 (used on test program and gdb)
Debugger: GDB 5.0
When the following code is compiled with the '-O0 -ggdb -lstdc++'
flags...
----
#include <iostream>
class Fred {
public:
void print_to(ostream &os) const { os << "I'm Fred.\n"; }
};
int main() {
Fred fred;
fred.print_to(cout);
return 0;
}
----
... and gdb is run with the following commands...
----
(gdb) b main
Breakpoint 1 at 0x804ac36: file main.cc, line 10.
(gdb) r
Starting program: /home/dickrp/proj/test/test
Breakpoint 1, main () at main.cc:10
(gdb) s
0x80518cc in Fred::print_to (this=0x400ff618, os=@0x4000aa20) at main.cc:5
(gdb) p os
$1 = (ostream &) @0x4000aa20: {
<ios> = {
<_ios_fields> = {
Debugger segmentation fault
----
... gdb crashes.
When it's run on the same code with the following commands...
----
(gdb) b main
Breakpoint 1 at 0x804ac36: file main.cc, line 10.
(gdb) r
Starting program: /home/dickrp/proj/test/test
Breakpoint 1, main () at main.cc:10
(gdb) n
I'm Fred.
(gdb) p fred.print_to(cout)
Program received signal SIGSEGV, Segmentation fault.
0x804cad0 in ostream::flush (this=0x40014000) at iostream.cc:915
915 iostream.cc: No such file or directory.
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on"
Evaluation of the expression containing the function (Fred::print_to(ostream &) const)
will be abandoned.
(gdb)
----
... it fails. Note that the code printed "I'm Fred." just fine.
However, trying to call the function from within gdb failed.
An 'uninstall' target for the gdb makefile would be useful.
-Robert Dick-