Mail Archives: cygwin/2004/09/28/08:37:26
> -----Original Message-----
> From: cygwin-owner On Behalf Of Dan Osborne
> Sent: 28 September 2004 13:22
> I was trying to step through the code in gdb and pin this
> down so setting
> breaks on abort and exit sounds useful. However, both b abort
> and b exit
> give me ...
>
> (gdb) b abort
> Breakpoint 1 at 0x401552: file otlv4.h, line 3608.
> (gdb) b exit
> Note: breakpoint 1 also set at pc 0x401552.
> Breakpoint 2 at 0x401552: file otlv4.h, line 3608.
>
> But line 3608 of otlv4.h looks like nothing to do with abort or exit
>
> add_var(i,var,in_out,apl_tab_size);
Um. Bizarre. You did build with -g and -O0, didn't you? Is this an actual
function call here, or does add_var turn out to be some kind of macro or something
that otherwise gets inlined?
> However, further digging reveals that my program gets to the
> throw command here ...
>
> catch ( RProgReturnException e )
> {
> throw;
> }
>
> and if I step on throw the debugger thinks I'm at ... gues
> which line?! yes, line 3608 of otlv4.h ...
>
> (gdb) s
> 0x1003b115 in __cxa_rethrow () at otlv4.h:3608
> 3608 add_var(i,var,in_out,apl_tab_size);
You didn't say what function that catch instruction is actually in: is it in the
function that calls add_var, or is it in add_var and add_var has been inlined at
this point? In any case, it certainly seems to be in the right place, considering
you are indeed re-throwing an exception.
> and if I step again I get ...
>
> Program exited with code 0303000.
Hmm. Have you properly used 'throws XXX' declarations on all the function
prototypes that need them?
> So I'm wondering firstly why gdb seems to have a mismatch
> between address
> and source line number and why that throw didn't get caught
> in my catch in
> main.
You haven't shown me your main catch clause, but I'll assume that it covers all
exception types (or at any rate, that it includes RProgReturnException). As I
suggest above, giving bad information to the compiler (through missing or bogus
throws decls) can cause it to generate bad unwind info: and we can pretty much
presume that the unwind info has to be bad in some way and that's why it's missing
your outer catch when it unwinds.
cheers,
DaveK
--
Can't think of a witty .sigline today....
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -