This is the mail archive of the archer@sourceware.org mailing list for the Archer project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Some pointers for this topic... I've looked at it several times so I
may be able to give you a head start :-)
On Mon, Jul 28, 2008 at 01:52:25PM +0100, Phil Muldoon wrote:
<snip useful info>
Raised exceptions may be caught:
catch throw - all exceptions, when thrown
catch throw <exceptname> - a particular exception, when thrown
catch catch - all exceptions, when caught
catch catch <exceptname> - a particular exception, when caught
I suspect the named versions do not work for C++ (iirc they did for
HP-UX at one time, and/or do for Ada).
Well I think it is "throw simple", that is the last line shown. But it would be neat if the catch would print the actual throw line, like a simple breakpoint. Shown below:
Making GDB do this is not too complicated. There is a caveat - the
last time I tried it, it broke Eclipse. Having the debugger stop with
a frame other than the innermost selected is a little tricky but there
may be a better way to do it than I tried; there's more state change
notifications in GDB than there were at the time.
Catchpoint 1 (exception thrown), 0x000000333d0c3d70 in __cxa_throw () from /usr/lib64/libstdc++.so.6
(gdb) s
Single stepping until exit from function __cxa_throw,
which has no line number information.
Exception: simple exception occurred
Program exited normally.
Well maybe not. I'm not sure why I lost control of the inferior.
GDB has this problem with both longjmp and longjmp-alikes. Pedro
nearly fixed the longjmp problem but was, in the end, defeated by some
complexities of glibc's pointer mangling; you can find discussion in
this spring's gdb-patches archives. DWARF unwinding uses a
longjmp-alike, GCC's __builtin_eh_return, which has the same problem.
GDB expects when you step over or out of a function that it can shortcut by placing a breakpoint at the return address. So it has to be taught about functions with abnormal control flow. Reference: gcc/unwind-dw2.c:uw_install_context.
gdb simple GNU gdb Fedora (6.8-11.fc9)
(gdb) catch catch
Function "__cxa_begin_catch" not defined.
(gdb) catch throw
Function "__cxa_throw" not defined.
IIRC this is because GDB does not (did not?) use pending breakpoints.
Try again after starting the program, so libstdc++ is loaded. If it's
still broken it's an easy fix.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |