This is the mail archive of the
mailing list for the Cygwin project.
RE: Program exited with code 0303000
- From: "Dave Korn" <dk at artimi dot com>
- To: "'Cygwin at Cygwin dot Com'" <cygwin at cygwin dot com>
- Date: Tue, 28 Sep 2004 13:37:07 +0100
- Subject: RE: Program exited with code 0303000
> -----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
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 )
> 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
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.
Can't think of a witty .sigline today....
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html