From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6104 invoked by alias); 16 Jul 2004 11:11:20 -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 6095 invoked from network); 16 Jul 2004 11:11:20 -0000 Received: from unknown (HELO eri.interia.pl) (217.74.65.138) by sourceware.org with SMTP; 16 Jul 2004 11:11:20 -0000 Received: from poczta.interia.pl (egaheer.interia.pl [217.74.65.182]) by eri.interia.pl (Postfix) with ESMTP id 2F81B26A70; Fri, 16 Jul 2004 13:11:18 +0200 (CEST) Received: from 127.0.0.1 (localhost [127.0.0.1]) by system.wewnetrzny9 (poczta.interia.pl) with SMTP id E6999374183; Fri, 16 Jul 2004 13:11:18 +0200 (CEST) Received: by poczta.fm (poczta.fm, from userid 502) id B6D6764304; Fri, 16 Jul 2004 13:11:18 +0200 (CEST) Received: from poczta.fm (dial-1698.zgora.dialog.net.pl [62.87.222.162]) by poczta.fm (poczta.fm) with ESMTP id 5FFB96432A; Fri, 16 Jul 2004 13:11:17 +0200 (CEST) Message-ID: <40F7B7D1.70409@poczta.fm> Date: Fri, 16 Jul 2004 13:17:00 -0000 From: Roland Zerek User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; PL; rv:1.6b) Gecko/20031205 Thunderbird/0.4 MIME-Version: 1.0 To: Michael Elizabeth Chastain , gdb@sources.redhat.com Subject: Re: How to setup a breakpoint on constructor References: <20040715103016.903344B104@berman.michael-chastain.com> In-Reply-To: <20040715103016.903344B104@berman.michael-chastain.com> Content-Type: text/plain; charset=ISO-8859-2; format=flowed Content-Transfer-Encoding: quoted-printable X-SW-Source: 2004-07/txt/msg00200.txt.bz2 U=BFytkownik Michael Elizabeth Chastain napisa=B3: > See the PROBLEMS file: >=20 > gdb/1091: Constructor breakpoints ignored > gdb/1193: g++ 3.3 creates multiple constructors: gdb 5.3 can't set brea= kpoints Well, I am using gdb-6.0 and gcc-3.4.0. Seems that problems remain... > When gcc 3.x compiles a C++ constructor or C++ destructor, it generates > 2 or 3 different versions of the object code. These versions have > unique mangled names (they have to, in order for linking to work), but > they have identical source code names, which leads to a great deal of > confusion. Specifically, if you set a breakpoint in a constructor or a > destructor, gdb will put a breakpoint in one of the versions, but your > program may execute the other version. This makes it impossible to set > breakpoints reliably in constructors or destructors [...] However this is logical to have mangled names. And of course few=20 constructors. Even ISO says that the default constructor may be created by= =20 the compiler in some situations... > Things you can try: >=20 > . modify your program so that the constructors that you want to > breakpoint call some function that is not a constructor, and break > on that. I've already been considerring it. > . run 'nm a.out | c++filt' to find the symbols in your program. > break on the absolute address: "break *0x01234567". this is > very crude (1960's technique) but it does work. Seems nice. However my MinGW (Win XP) seems not to have these. I will take= =20 a look of it later :-) > . use nm, c++filt, and 'strip -N' to strip out symbols for > not-in-charge constructors. This is scriptable, if someone > wants to write a little script. What the "not-in-charge" means? Thx for reply. --=20 Roland r o l a n d z (at) poczta fm