This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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"



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]