From f06c356c722dbf27cd1077dafe51519ba431e99b Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Tue, 18 Sep 2012 16:28:37 -0400 Subject: CarpetLib: Clean up backtrace generation Also add test parameter file. --- Carpet/CarpetLib/param.ccl | 6 ++++++ Carpet/CarpetLib/schedule.ccl | 7 +++++++ Carpet/CarpetLib/src/backtrace.cc | 42 +++++++++++++++++++++++++++++-------- Carpet/CarpetLib/src/backtrace.hh | 2 +- Carpet/CarpetLib/test/backtrace.par | 10 +++++++++ 5 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 Carpet/CarpetLib/test/backtrace.par diff --git a/Carpet/CarpetLib/param.ccl b/Carpet/CarpetLib/param.ccl index deca16868..c559f1604 100644 --- a/Carpet/CarpetLib/param.ccl +++ b/Carpet/CarpetLib/param.ccl @@ -104,6 +104,12 @@ INT max_memory_size_MB "Maximum amount of memory per MPI process, set via setrli +BOOLEAN test_backtrace "Kill yourself to test the backtrace mechanism" +{ +} "no" + + + # Statistics INT print_timestats_every "Print timing statistics periodically" STEERABLE=always diff --git a/Carpet/CarpetLib/schedule.ccl b/Carpet/CarpetLib/schedule.ccl index 34dfecec2..e719fc071 100644 --- a/Carpet/CarpetLib/schedule.ccl +++ b/Carpet/CarpetLib/schedule.ccl @@ -12,6 +12,13 @@ SCHEDULE CarpetLib_test_prolongate_3d_rf2 AT paramcheck OPTIONS: global } "Test prolongation operators" +if (test_backtrace) { + SCHEDULE CarpetLib_BacktraceTest AT wragh + { + LANG: C + } "Test stack backtraces" +} + SCHEDULE CarpetLib_printtimestats AT analysis { LANG: C diff --git a/Carpet/CarpetLib/src/backtrace.cc b/Carpet/CarpetLib/src/backtrace.cc index fbac6e5c8..fa0fb1881 100644 --- a/Carpet/CarpetLib/src/backtrace.cc +++ b/Carpet/CarpetLib/src/backtrace.cc @@ -1,5 +1,7 @@ #include "backtrace.hh" +//#include + #ifdef HAVE_BACKTRACE // http://cairo.sourcearchive.com/documentation/1.9.4/backtrace-symbols_8c-source.html @@ -248,7 +250,8 @@ namespace CarpetLib { } if (state == Print) { /* set buf just past the end of string */ - buf = buf + total + 1; + //TODO buf = buf + total + 1; + buf = buf + strlen(buf) + 1; } naddr--; } @@ -395,14 +398,16 @@ namespace CarpetLib { - ////////////////////////////////////////////////////////////////////////////// - +//////////////////////////////////////////////////////////////////////////////// -#include #include "dist.hh" + +#include +#include +#include #include #include @@ -472,7 +477,7 @@ namespace CarpetLib { if (loc != NULL) *loc = '\0'; #endif - stacktrace << i - 1 << ". " << demangled << "(" << names[i] << ")" << '\n'; + stacktrace << i - 1 << ". " << demangled << " [" << names[i] << "]" << '\n'; free(demangled); } else { // Just output the raw symbol stacktrace << i - 1 << ". " << names[i] << '\n'; @@ -503,7 +508,7 @@ namespace CarpetLib { myfile << "\n" << "The hexadecimal addresses in this backtrace can also be interpreted\n" << "with a debugger (e.g. gdb), or with the 'addr2line' (or 'gaddr2line')\n" - << "command line tool.\n"; + << "command line tool: 'addr2line -e cactus_sim
'.\n"; myfile.close(); } @@ -524,7 +529,7 @@ namespace CarpetLib { pid_t const pid = getpid(); cerr << "Rank " << dist::rank() << " with PID " << pid << " " - << "received signal" << signum << endl; + << "received signal " << signum << endl; // Restore the default signal handler signal(signum, SIG_DFL); @@ -536,8 +541,27 @@ namespace CarpetLib { void request_backtraces() { - signal(6, signal_handler); - signal(11, signal_handler); + signal(SIGQUIT, signal_handler); + signal(SIGILL , signal_handler); + signal(SIGABRT, signal_handler); + signal(SIGFPE , signal_handler); + signal(SIGBUS , signal_handler); } } // namespace CarpetLib + + + +//////////////////////////////////////////////////////////////////////////////// + + + +#include +#include + +extern "C" void CarpetLib_BacktraceTest(CCTK_ARGUMENTS) +{ + CCTK_INFO("Generating backtrace..."); + kill(0, SIGABRT); + CCTK_WARN(CCTK_WARN_ABORT, "Backtrace test failed"); +} diff --git a/Carpet/CarpetLib/src/backtrace.hh b/Carpet/CarpetLib/src/backtrace.hh index e6135b6e6..43acb7405 100644 --- a/Carpet/CarpetLib/src/backtrace.hh +++ b/Carpet/CarpetLib/src/backtrace.hh @@ -8,4 +8,4 @@ namespace CarpetLib { } // namespace CarpetLib -#endif //#ifndef BACKTRACE_HH +#endif // #ifndef BACKTRACE_HH diff --git a/Carpet/CarpetLib/test/backtrace.par b/Carpet/CarpetLib/test/backtrace.par new file mode 100644 index 000000000..2cab562fb --- /dev/null +++ b/Carpet/CarpetLib/test/backtrace.par @@ -0,0 +1,10 @@ +ActiveThorns = " + Carpet + CarpetLib + CoordBase + IOUtil +" + +CarpetLib::test_backtrace = yes + +IO::out_dir = $parfile -- cgit v1.2.3