From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18936 invoked by alias); 9 Mar 2005 22:55:26 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 18778 invoked from network); 9 Mar 2005 22:55:13 -0000 Received: from unknown (HELO webmail.streamline-computing.com) (82.133.39.164) by sourceware.org with SMTP; 9 Mar 2005 22:55:13 -0000 Received: from [80.6.111.103] (helo=cpc2-oxfd5-5-0-cust103.oxfd.cable.ntl.com) by webmail.streamline-computing.com with asmtp (Exim 3.35 #1 (Debian)) id 1D9A5N-0004ct-00; Wed, 09 Mar 2005 22:55:25 +0000 Subject: Re: Re. How to setup a breakpoint on constructor From: David Lecomber To: Michael Stout Cc: gdb In-Reply-To: <422F7A0B.6080807@evolution.com> References: <422F7A0B.6080807@evolution.com> Content-Type: text/plain Date: Wed, 09 Mar 2005 22:55:00 -0000 Message-Id: <1110409385.8084.24.camel@cpc2-oxfd5-5-0-cust103.oxfd.cable.ntl.com> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-SW-Source: 2005-03/txt/msg00088.txt.bz2 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