This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
[gdb6.8] setting the same mutliple breakpoint twice causes SIGSEGV
- From: Bogdan Slusarczyk <bodzio131 at op dot pl>
- To: gdb at sourceware dot org
- Date: Fri, 30 May 2008 14:25:35 +0200
- Subject: [gdb6.8] setting the same mutliple breakpoint twice causes SIGSEGV
Hi, I want to ask you if this problem is known (I cannot find such bug).
If you set the same MULTIPLE breakpoint twice, and delete last one
during gdb session, you will get SIGSEGV from debugged process. If you
set such breakpoint one time, or set few breakpoints but in different
lines then everything is ok.
Problem exists on Windows (cygwin, g++ 3.4.4, gdb 6.8.0.20080328-cvs
(cygwin-special) ) and Linux (g++ 3.3.5, gdb 6.8). Let me know if you
need more details.
Regards,
Bogdan
//--------- main.cpp, compiled with: g++ -g3 main.cpp -o test -------------
template< typename _T >
class Test
{
public:
Test( _T _number );
_T multiple( int _x ) const;
_T m_number;
};
template< typename _T >
Test< _T >::Test( _T _number )
: m_number( _number )
{
}
template< typename _T >
_T
Test< _T >::multiple( int _x ) const
{
return m_number * _x; //set breakpoint here
}
int main( int argc, char** argv )
{
Test< int > a( 10 );
Test< double > b( 2.0 );
int x;
double z;
for ( int i = 0; i < 20; i++ )
{
x = a.multiple( i );
z = b.multiple( i );
}
return 0;
}
//------------- (WIN) gdb output with SIGSEGV -----------------------
sh-3.2$ gdb -nw -q -i mi
(gdb)
-file-exec-and-symbols test
^done
(gdb)
-break-insert main.cpp:20
^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="<MULTIPLE>",addr="0x00401410",times="0"}
(gdb)
-break-insert main
^done,bkpt={number="2",type="breakpoint",disp="keep",enabled="y",addr="0x00401075",func="main",file="main.cpp",fullname="/cygdrive/c/test/main.cpp",line="25",times="0"}
(gdb)
-exec-run
^running
(gdb)
~"[New thread 3924.0x114]\n"
~"[New thread 3924.0xdb0]\n"
*stopped,reason="breakpoint-hit",bkptno="2",thread-id="1",frame={addr="0x00401075",func="main",args=[{name="argc",value="1"},{name="argv",value="0x6624d8"}],file="main.cpp",fullname="/cygdrive/c/test/main.cpp",line="25"}
(gdb)
-break-insert main.cpp:20
^done,bkpt={number="3",type="breakpoint",disp="keep",enabled="y",addr="<MULTIPLE>",addr="0x00401410",times="0"}
(gdb)
-exec-cotntinue
^running
(gdb)
*stopped,reason="breakpoint-hit",bkptno="1",thread-id="1",frame={addr="0x00401420",func="Test<int>::multiple",args=[{name="this",value="0x22ccb4"},{name="_x",value="0"}],file="main.cpp",fullname="/cygdrive/c/test/main.cpp",line="20"}
(gdb)
-break-delete 3
^done
(gdb)
-exec-continue
^running
(gdb)
*stopped,reason="signal-received",signal-name="SIGTRAP",signal-meaning="Trace/breakpoint
trap",thread-id="1",frame={addr="0x00401423",func="Test<int>::multiple",args=[{name="this",value="0x22ccb4"},{name="_x",value="0"}],file="main.cpp",fullname="/cygdrive/c/test/main.cpp",line="21"}
(gdb)
-break-delete
^done
(gdb)
-exec-continue
^running
(gdb)
*stopped,reason="signal-received",signal-name="SIGSEGV",signal-meaning="Segmentation
fault",thread-id="1",frame={addr="0x00401426",func="Test<int>::multiple",args=[{name="this",value="0x22ccb4"},{name="_x",value="0"}],file="main.cpp",fullname="/cygdrive/c/test/main.cpp",line="21"}
(gdb)
quit
&"quit\n"
sh-3.2$ exit
exit
//------------- (LINUX) gdb output with SIGSEGV -----------------------
bogdans@libonbuilder:~/gdb_test$ ./gdb -nw -q -i mi
(gdb)
-file-exec-and-symbols test
^done
(gdb)
-break-insert main.cpp:20
^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="<MULTIPLE>",addr="0x08048428",times="0"}
(gdb)
-break-insert main
^done,bkpt={number="2",type="breakpoint",disp="keep",enabled="y",addr="0x08048394",func="main",file="main.cpp",fullname="/home/bogdans/gdb_test/main.cpp",line="26",times="0"}
(gdb)
-exec-run
^running
(gdb)
*stopped,reason="breakpoint-hit",bkptno="2",thread-id="0",frame={addr="0x08048394",func="main",args=[{name="argc",value="1"},{name="argv",value="0xbffffcb4"}],file="main.cpp",fullname="/home/bogdans/gdb_test/main.cpp",line="26"}
(gdb)
-break-insert main.cpp:20
^done,bkpt={number="3",type="breakpoint",disp="keep",enabled="y",addr="<MULTIPLE>",addr="0x08048428",times="0"}
(gdb)
-exec-continue
^running
(gdb)
*stopped,reason="breakpoint-hit",bkptno="1",thread-id="0",frame={addr="0x08048428",func="Test<int>::multiple",args=[{name="this",value="0x1"},{name="_x",value="-1073742668"}],file="main.cpp",fullname="/home/bogdans/gdb_test/main.cpp",line="20"}
(gdb)
-break-delete
^done
(gdb)
-exec-continue
^running
(gdb)
*stopped,reason="signal-received",signal-name="SIGTRAP",signal-meaning="Trace/breakpoint
trap",thread-id="0",frame={addr="0x08048437",func="Test<double>::multiple",args=[{name="this",value="0x1"},{name="_x",value="-1073742668"}],file="main.cpp",fullname="/home/bogdans/gdb_test/main.cpp",line="20"}
(gdb)
-break-delete
^done
(gdb)
-exec-continue
^running
(gdb)
*stopped,reason="signal-received",signal-name="SIGSEGV",signal-meaning="Segmentation
fault",thread-id="0",frame={addr="0x0804843f",func="Test<double>::multiple",args=[{name="this",value="0x0"},{name="_x",value="1073741824"}],file="main.cpp",fullname="/home/bogdans/gdb_test/main.cpp",line="21"}
(gdb)
quit
&"quit\n"