void PrintSigno(int signo) { static int i = 0; printf("\n\n=========>>>catch signal %d (%s) i = %d <<<=========", signo, (char *)strsignal(signo), i++); printf("\nDump stack start..."); DumpBacktrace(); printf("\nDump stack end..."); }
void RegSignal() { signal(SIGINT, SignalHander); signal(SIGSEGV, SignalHander); signal(SIGUSR1, SignalHander); printf("\nCurrent function calls list is: "); printf("\n----------------------------------"); DumpBacktrace(); printf("\n----------------------------------\n"); }
void SignalHander(int signo) { printf("\n\n=========>>>catch signal %d (%s) <<<=========", signo, (char *)strsignal(signo)); printf("\nDump stack start..."); DumpBacktrace(); printf("\nDump stack end..."); /* 恢复并发送信号 */ signal(signo, SIG_DFL); raise(signo); }
void Abort() { DumpBacktrace(stderr); fflush(stderr); ABORT_NO_BACKTRACE(); }
void demo(int n) { return n == 0 ? DumpBacktrace(0) : demo(n - 1); }