// // aegis - project change supervisor // Copyright (C) 2014 Peter Miller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or (at // your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program. If not, see . // #include #include #include #include #ifdef HAVE_BACKTRACE void back_trace_print(void) { fflush(stdout); fprintf(stderr, "%s: %d: %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #define BT_MAX_DEPTH 20 void **bt_info; bt_info = (void**)calloc(BT_MAX_DEPTH, sizeof(void*)); int bt_depth = backtrace(bt_info, BT_MAX_DEPTH); fprintf(stderr, "%s: %d: bt_depth = %d\n", __FILE__, __LINE__, bt_depth); char **symbol = backtrace_symbols(bt_info, bt_depth); fprintf(stderr, "%s: %d: symbol = %p\n", __FILE__, __LINE__, symbol); for (int j = 0; j < bt_depth; ++j) { fprintf(stderr, "%d: %s\n", j, symbol[j]); } fflush(stderr); } #else void back_trace_print(void) { } #endif // vim: set ts=8 sw=4 et :