C++ common classes
General purpose classes for use across projects (Apache license)
segcatch.cpp
Go to the documentation of this file.
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 
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines