* Re. How to setup a breakpoint on constructor
@ 2005-03-09 22:35 Michael Stout
2005-03-09 22:55 ` David Lecomber
0 siblings, 1 reply; 3+ messages in thread
From: Michael Stout @ 2005-03-09 22:35 UTC (permalink / raw)
To: gdb
I've hacked my gdb sources to get breakpoints to work on constructors.
Well it seems to work.
see
http://sources.redhat.com/ml/gdb/2004-07/msg00162.html
and
http://sources.redhat.com/ml/gdb/2004-07/msg00163.html
which explains the issue with multiple copies of the constructor
Here is my analysis from someone who is completely unfamiliar with gdb:
There are two essential problems
1) gdb assumes there is a one-to-one mapping between a
file-linenumber-symbol-table and file:linenumber entered by
the user.
a) find_line_common in symtab.c currently only returns one index into
the linnumber-symbol-table where it should
be able to return multiple line numbers.
b) the same is true for find_line_symtab
c) decode_all_digits in linespec.c calls fine_line_symtab needs to
handle the multiple values returned by find_line_symtab
2) gdb assumes a one-to-one mapping between a breakpoint number and a
breakpoint address. I hacked my fix by
using the breakpoint::releated_breakpoint but I don't think this is not
a good fix.
To fix this requires a load of changes. I'm willing to start submitting
patches to get this to work, but I need to have someone
look over my shoulder. The first step would be to modify modify
find_line_common to return multiple indexes.
Here is a simple sample program that illustrates the problem
class gobo
{
public:
gobo();
int i;
};
gobo ::gobo()
{
i = 4;
}
int main(int argc,int **argv)
{
gobo flagger;
}
g++ -g -o foo foo.cpp (g++ 3.3.5 debian)
gdb foo
break foo.cpp:10
run
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Re. How to setup a breakpoint on constructor
2005-03-09 22:35 Re. How to setup a breakpoint on constructor Michael Stout
@ 2005-03-09 22:55 ` David Lecomber
2005-03-09 23:45 ` Michael Stout
0 siblings, 1 reply; 3+ messages in thread
From: David Lecomber @ 2005-03-09 22:55 UTC (permalink / raw)
To: Michael Stout; +Cc: gdb
Hi Michael,
I tried the same -- and am happily using a GDB with working constructors
- and (bonus) working breakpoints for compilers that generate different
versions of the same function in the same executable - eg. Intel's
compiler which has specific optimizations depending on what's under the
hood.
http://sources.redhat.com/ml/gdb-patches/2004-10/msg00241.html
The general consensus back then to my solution was "ok, it works, but it
ain't how we'd like to fix it". Looks like we've both come up with
broadly the same.
We're still waiting for the "Right Thing" [TM] to appear... sigh.. not
sure who's thinking about this one at the moment.
d.
On Wed, 2005-03-09 at 14:34 -0800, Michael Stout wrote:
> I've hacked my gdb sources to get breakpoints to work on constructors.
> Well it seems to work.
> see
>
> http://sources.redhat.com/ml/gdb/2004-07/msg00162.html
>
> and
>
> http://sources.redhat.com/ml/gdb/2004-07/msg00163.html
>
> which explains the issue with multiple copies of the constructor
>
> Here is my analysis from someone who is completely unfamiliar with gdb:
> There are two essential problems
>
> 1) gdb assumes there is a one-to-one mapping between a
> file-linenumber-symbol-table and file:linenumber entered by
> the user.
>
> a) find_line_common in symtab.c currently only returns one index into
> the linnumber-symbol-table where it should
> be able to return multiple line numbers.
> b) the same is true for find_line_symtab
> c) decode_all_digits in linespec.c calls fine_line_symtab needs to
> handle the multiple values returned by find_line_symtab
>
> 2) gdb assumes a one-to-one mapping between a breakpoint number and a
> breakpoint address. I hacked my fix by
> using the breakpoint::releated_breakpoint but I don't think this is not
> a good fix.
>
>
> To fix this requires a load of changes. I'm willing to start submitting
> patches to get this to work, but I need to have someone
> look over my shoulder. The first step would be to modify modify
> find_line_common to return multiple indexes.
>
> Here is a simple sample program that illustrates the problem
>
> class gobo
> {
> public:
> gobo();
> int i;
> };
>
> gobo ::gobo()
> {
> i = 4;
> }
>
> int main(int argc,int **argv)
> {
> gobo flagger;
> }
>
> g++ -g -o foo foo.cpp (g++ 3.3.5 debian)
> gdb foo
> break foo.cpp:10
> run
>
>
>
>
>
>
>
>
>
>
>
>
>
>
--
David Lecomber <david@allinea.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Re. How to setup a breakpoint on constructor
2005-03-09 22:55 ` David Lecomber
@ 2005-03-09 23:45 ` Michael Stout
0 siblings, 0 replies; 3+ messages in thread
From: Michael Stout @ 2005-03-09 23:45 UTC (permalink / raw)
To: David Lecomber; +Cc: gdb
I didn't modify the linetable_entry structure, but just changed the
signature of find_line_common from
/* Given a line table and a line number, return the index into the line
table for the pc of the nearest line whose number is >= the specified
one.
Return -1 if none is found. The value is >= 0 if it is an index.
Set *EXACT_MATCH nonzero if the value returned is an exact match. */
static int find_line_common (struct linetable *l, int lineno,
int *exact_match)
to
static int
find_line_common (struct linetable *l, int lineno,
int *exact_match,int **returned_entries);
The current signature is just plain wrong or at best misleading since
there can be multiple linetable
entries that share a common linenumber. The same is true for
find_line_pc. The first change I would
recommend is renaming find_line_common to find_first_line_common and
implementing it using
a correct version of find_line_common.
Mike
David Lecomber wrote:
>Hi Michael,
>
>I tried the same -- and am happily using a GDB with working constructors
>- and (bonus) working breakpoints for compilers that generate different
>versions of the same function in the same executable - eg. Intel's
>compiler which has specific optimizations depending on what's under the
>hood.
>
>http://sources.redhat.com/ml/gdb-patches/2004-10/msg00241.html
>
>The general consensus back then to my solution was "ok, it works, but it
>ain't how we'd like to fix it". Looks like we've both come up with
>broadly the same.
>
>We're still waiting for the "Right Thing" [TM] to appear... sigh.. not
>sure who's thinking about this one at the moment.
>
>d.
>
>
>
>On Wed, 2005-03-09 at 14:34 -0800, Michael Stout wrote:
>
>
>>I've hacked my gdb sources to get breakpoints to work on constructors.
>>Well it seems to work.
>>see
>>
>>http://sources.redhat.com/ml/gdb/2004-07/msg00162.html
>>
>>and
>>
>>http://sources.redhat.com/ml/gdb/2004-07/msg00163.html
>>
>>which explains the issue with multiple copies of the constructor
>>
>>Here is my analysis from someone who is completely unfamiliar with gdb:
>>There are two essential problems
>>
>>1) gdb assumes there is a one-to-one mapping between a
>>file-linenumber-symbol-table and file:linenumber entered by
>>the user.
>>
>>a) find_line_common in symtab.c currently only returns one index into
>>the linnumber-symbol-table where it should
>>be able to return multiple line numbers.
>>b) the same is true for find_line_symtab
>>c) decode_all_digits in linespec.c calls fine_line_symtab needs to
>>handle the multiple values returned by find_line_symtab
>>
>>2) gdb assumes a one-to-one mapping between a breakpoint number and a
>>breakpoint address. I hacked my fix by
>>using the breakpoint::releated_breakpoint but I don't think this is not
>>a good fix.
>>
>>
>>To fix this requires a load of changes. I'm willing to start submitting
>>patches to get this to work, but I need to have someone
>>look over my shoulder. The first step would be to modify modify
>>find_line_common to return multiple indexes.
>>
>>Here is a simple sample program that illustrates the problem
>>
>>class gobo
>>{
>>public:
>> gobo();
>> int i;
>>};
>>
>>gobo ::gobo()
>>{
>> i = 4;
>>}
>>
>>int main(int argc,int **argv)
>>{
>> gobo flagger;
>>}
>>
>>g++ -g -o foo foo.cpp (g++ 3.3.5 debian)
>>gdb foo
>>break foo.cpp:10
>>run
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-03-09 23:45 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-03-09 22:35 Re. How to setup a breakpoint on constructor Michael Stout
2005-03-09 22:55 ` David Lecomber
2005-03-09 23:45 ` Michael Stout
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox