$search
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