From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27469 invoked by alias); 9 Mar 2005 22:35:08 -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 26314 invoked from network); 9 Mar 2005 22:34:55 -0000 Received: from unknown (HELO frank.idealab.com) (64.208.8.4) by sourceware.org with SMTP; 9 Mar 2005 22:34:55 -0000 Received: (qmail 24437 invoked by uid 72); 9 Mar 2005 22:34:54 -0000 Received: from stout@evolution.com by frank.idealab.com by uid 70 with qmail-scanner-1.22 (sweep: 2.20/3.84. Clear:RC:1(10.1.22.14):. Processed in 3.064405 secs); 09 Mar 2005 22:34:54 -0000 X-Qmail-Scanner-Mail-From: stout@evolution.com via frank.idealab.com X-Qmail-Scanner: 1.22 (Clear:RC:1(10.1.22.14):. Processed in 3.064405 secs) Received: from unknown (HELO [10.1.22.14]) (10.1.22.14) by 172.31.30.235 with SMTP; Wed, 09 Mar 2005 22:34:51 +0000 Message-ID: <422F7A0B.6080807@evolution.com> Date: Wed, 09 Mar 2005 22:35:00 -0000 From: Michael Stout User-Agent: Mozilla Thunderbird 0.9 (Windows/20041103) MIME-Version: 1.0 To: gdb@sources.redhat.com Subject: Re. How to setup a breakpoint on constructor Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2005-03/txt/msg00087.txt.bz2 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