This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
RE: Finding the type of an exception
- From: "Kulkarni, Mayuresh \(IT\)" <Mayuresh dot Kulkarni at morganstanley dot com>
- To: "Daniel Jacobowitz" <drow at false dot org>
- Cc: <gdb at sourceware dot org>
- Date: Sun, 29 Oct 2006 17:37:49 -0500
- Subject: RE: Finding the type of an exception
Ahh cool.. That worked!!
And there I was trying to do some fancy casting business (trying to
simulate the __cxa_call_unexpected(void *) function by looking at its
source code. )
Thanks a lot,
Mayuresh.
| -----Original Message-----
| From: Daniel Jacobowitz [mailto:drow@false.org]
| Sent: Sunday, October 29, 2006 5:22 PM
| To: Kulkarni, Mayuresh (IT)
| Cc: gdb@sourceware.org
| Subject: Re: Finding the type of an exception
|
| On Sun, Oct 29, 2006 at 05:15:47PM -0500, Kulkarni,
| Mayuresh (IT) wrote:
| > Hello,
| >
| > I am looking at a core generated by a C++ process
| because a throw spec
| > was violated by a function.
| >
| > The concerned frame in the stack trace is :
| > #5 0xf65c2485 in __cxa_call_unexpected
| (exc_obj_in=0xb58cbb4) at
| > /sw/gcc/src/libstdc++-v3/libsupc++/eh_personality.cc:485
| >
| >
| > At this point in the process (after std::unexpected()
| has been called
| > and we end up in the above function), is it still
| somehow possible to
| > deduce the type of the exception from the exc_obj_in
| void * argument?
| > Say by trying to interpret the above void * argument as a
| > std::exception (from other reasons, I am pretty sure
| that this was a
| > std::exception) and then doing what typeid does to get
| at the type_info ?
|
| The best place to look for more information about this is
| the common
| C++ ABI document; it's named for Itanium, but don't let
| that throw you
| off, it is actually used with only minor variations (such
| as the sizes of types) on other platforms. You can learn
| more about it here:
|
| http://www.codesourcery.com/cxx-abi/abi.html
| http://www.codesourcery.com/cxx-abi/abi-eh.html
|
| The object you've got there is a __cxa_exception, if I'm
| remembering how this works right. If so then the first
| pointer is going to be to a type_info.
|
| --
| Daniel Jacobowitz
| CodeSourcery
|
--------------------------------------------------------
NOTICE: If received in error, please destroy and notify sender. Sender does not intend to waive confidentiality or privilege. Use of this email is prohibited when received in error.