void abnormal_exit_handler(int signum) { /* Free any shared memory that has been allocated */ PgShmemCleanup(); #if 1 if ( (signum == SIGSEGV) || (signum == SIGILL) || (signum == SIGABRT) ) { printf("prog = viewer\npid = %d\nsignal = %s\n", getpid(), strsignal(signum)); #if 0 printf("stack logged to someplace\n"); printf("need to fix xpcom/base/nsTraceRefCnt.cpp in WalkTheStack.\n"); nsTraceRefcntImpl::WalkTheStack(stdout); #endif printf("Sleeping for 5 minutes.\n"); printf("Type 'gdb viewer %d' to attach your debugger to this thread.\n", getpid()); sleep(300); printf("Done sleeping...\n"); } #endif _exit(1); }
void abnormal_exit_handler(int signum) { /* Free any shared memory that has been allocated */ PgShmemCleanup(); #if defined(DEBUG) if ( (signum == SIGSEGV) || (signum == SIGILL) || (signum == SIGABRT) || (signum == SIGFPE) ) { printf("prog = %s\npid = %d\nsignal = %s\n", _progname, getpid(), strsignal(signum)); printf("Sleeping for %d seconds.\n",_gdb_sleep_duration); printf("Type 'gdb %s %d' to attach your debugger to this thread.\n", _progname, getpid()); sleep(_gdb_sleep_duration); printf("Done sleeping...\n"); } #endif _exit(1); }