exception_tracer.cpp
Go to the documentation of this file.
00001 
00017 /*****************************************************************************
00018 ** Cross Platform
00019 *****************************************************************************/
00020 
00021 #include <ecl/config/ecl.hpp>
00022 
00023 #ifndef ECL_IS_WIN32
00024 
00025 /*****************************************************************************
00026 ** Includes
00027 *****************************************************************************/
00028 
00029 #include <execinfo.h> // backtrace
00030 #include <signal.h>
00031 #include <cstdlib>
00032 #include <exception>
00033 #include <iostream>
00034 
00035 /*****************************************************************************
00036 ** Using
00037 *****************************************************************************/
00038 
00039 using namespace std;
00040 
00041 /*****************************************************************************
00042 ** Exceptions
00043 *****************************************************************************/
00044 
00048 class ExceptionTracer {
00049 public:
00050          ExceptionTracer() {
00051          void * array[25];
00052          int nSize = backtrace(array, 25);
00053          char ** symbols = backtrace_symbols(array, nSize);
00054 
00055          for (int i = 0; i < nSize; i++) {
00056              cout << symbols[i] << endl;
00057          }
00058          free(symbols);
00059      }
00060 };
00061 
00062 void f() {
00063         std::cout << "f()" << std::endl;
00064         throw ExceptionTracer();
00065 }
00066 /*****************************************************************************
00067 ** Main
00068 *****************************************************************************/
00069 
00070 int main(int argc, char **argv) {
00071 
00072         std::cout << "Dude" << std::endl;
00073         f();
00074 
00075         return 0;
00076 }
00077 #else
00078 
00079 int main(int argc, char **argv) {
00080 
00081         std::cout << "No backtrace support in windows (that I know of yet)." << std::endl;
00082         return 0;
00083 }
00084 #endif
00085 


ecl_exceptions
Author(s): Daniel Stonier (d.stonier@gmail.com)
autogenerated on Thu Jan 2 2014 11:11:54