Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Jan 2013 12:54:03 +0000
From:      David Chisnall <theraven@freebsd.org>
To:        Stefan Farfeleder <stefanf@freebsd.org>
Cc:        freebsd-current@freebsd.org
Subject:   Re: Unbreaking gdb's catch throw
Message-ID:  <8FA4D44F-0D32-4374-810F-5630E995F61F@freebsd.org>
In-Reply-To: <20130104124927.GB1430@mole.fafoe.narf.at>
References:  <20130104123424.GA1430@mole.fafoe.narf.at> <FC255095-1EFB-4713-887E-E79C53C9F193@FreeBSD.org> <20130104124927.GB1430@mole.fafoe.narf.at>

next in thread | previous in thread | raw e-mail | index | archive | help

On 4 Jan 2013, at 12:49, Stefan Farfeleder wrote:

> On Fri, Jan 04, 2013 at 12:38:44PM +0000, David Chisnall wrote:
>> Is this on 9.1?  In -CURRENT and 9.1, libstdc++ is a filter library, =
and libsupc++ or or libcxxrt are the filtee.  This means that the =
__cxa_throw symbol appears to be in libstdc++ (for symbol versioning =
purposes), but is actually in the ABI library.  If you tell gdb to put =
the breakpoint on __cxa_throw itself, then it should tell you that there =
are multiple definitions and ask which one you want (if it doesn't, it's =
a gdb bug). =20
>>=20
>=20
> This is on 10.0-CURRENT r244738 amd64. The commands 'b __cxa_throw' =
and
> 'catch throw' seemd to be identical, and gdb does not ask about =
multiple
> versions of __cxa_throw.
>=20
> To be honest, I don't care exactly whose bug it is, I want it to work =
again :D

As a work-around, you can put the breakpoint on _Unwind_RaiseException =
instead.  This will work for any language, not just C++ (e.g. it will =
notice Objective-C or gcj-compiled Java exceptions).

David=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8FA4D44F-0D32-4374-810F-5630E995F61F>