This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Exception Catching.


Yeah, I knew how to get the signal from SIGSEGV, the problem is that once
inside the signal handler, if I do a throw, it does not ever get caught by
the catch.  So I cannot gracefully clean up after myself.

Currently my headache is that if I have an unfound bug that crashes my
program, I need to do some database cleanup work, before I exit.  Some of
the data needed to clean up the database was created on the stack and is not
accessible from inside the signal handler without a fairly major hack.

It isn't really a debug problem, but a cleanup problem.

Andy

----- Original Message -----
From: Paul Bunyk <paul@pbunyk.physics.sunysb.edu>
To: Andy Hanson <andrew_g_hanson@yahoo.com>
Cc: <gcc@gcc.gnu.org>
Sent: Thursday, June 08, 2000 11:51 AM
Subject: Re: Exception Catching.



See signal(2).

You can install a signal handler (your function) which will be
activated when your Sig 11 occures. You might even try to raise an
exception from within that signal handler (to be catched in your catch
block), but I'm not sure if it would work. From man page:
       According  to  POSIX,  the behaviour of a process is unde­
       fined after it ignores a SIGFPE, SIGILL, or SIGSEGV signal
       that  was not generated by the kill() or the raise() func­
       tions.

Hope this helps, but what is wrong with good old way of just getting
the core file after the program crashed and look on it in debugger?

Paul


Andy Hanson writes:
 > Does any version of GCC catch exceptions on things like this.
 >
 > void test_func(void)
 > {
 >    long *val=NULL;
 >
 >    ((long *)val)[0]=0xdeadcafe;
 > }
 >
 > int main(void)
 > {
 >    try
 >    {
 >       test_func();
 >    }
 >    catch(...)
 >    {
 >       printf("error occured\n");
 >       return 1;
 >    }
 >    printf("worked ok\n");
 >
 >    return 0;
 > }
 >
 > I'm still used to the VC++ compiler suite which allows me to catch memory
 > violations like this.  Under linux gcc (egcs-2.91.66 19990314/Linux
 > (egcs-1.1.2 release)) I just get a segmentation fault.
 >
 > Is there another way to trap such a violation using gcc (under unix
 > platforms)?
 >
 > Thanks in advance.
 >
 > Andy
 >
 >
 > __________________________________________________
 > Do You Yahoo!?
 > Talk to your friends online with Yahoo! Messenger.
 > http://im.yahoo.com


__________________________________________________
Do You Yahoo!?
Talk to your friends online with Yahoo! Messenger.
http://im.yahoo.com

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]