C++ common classes
General purpose classes for use across projects (Apache license)
|
00001 /* 00002 Copyright [2010] [Richard Bross] 00003 00004 Licensed under the Apache License, Version 2.0 (the "License"); 00005 you may not use this file except in compliance with the License. 00006 You may obtain a copy of the License at 00007 00008 http://www.apache.org/licenses/LICENSE-2.0 00009 00010 Unless required by applicable law or agreed to in writing, software 00011 distributed under the License is distributed on an "AS IS" BASIS, 00012 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 See the License for the specific language governing permissions and 00014 limitations under the License. 00015 */ 00016 #include <signal.h> 00017 #include <stdio.h> 00018 #include <stdlib.h> 00019 #include <string.h> 00020 #include <execinfo.h> 00021 00022 void segfault_sigaction(int signal, siginfo_t *si, void *arg) 00023 { 00024 printf("Caught segfault at address %p sig number %d\n", si->si_addr, si->si_errno); 00025 exit(0); 00026 } 00027 00028 int main(void) 00029 { 00030 struct sigaction sa; 00031 00032 memset(&sa, 0, sizeof(sa)); 00033 sigemptyset(&sa.sa_mask); 00034 sa.sa_sigaction = segfault_sigaction; 00035 sa.sa_flags = SA_SIGINFO | SA_ONSTACK; 00036 00037 sigaction(SIGSEGV, &sa, NULL); 00038 00039 int *foo = NULL; 00040 *foo = 1; 00041 00042 return 0; 00043 } 00044 00045