aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2012-09-18 16:28:37 -0400
committerErik Schnetter <schnetter@gmail.com>2012-09-18 16:28:37 -0400
commitf06c356c722dbf27cd1077dafe51519ba431e99b (patch)
tree8044a36094e2392ea8ef0d4f57a4f713daccc91d
parent45872e1f5483cb9b556de7db9a689f16f59ba737 (diff)
CarpetLib: Clean up backtrace generation
Also add test parameter file.
-rw-r--r--Carpet/CarpetLib/param.ccl6
-rw-r--r--Carpet/CarpetLib/schedule.ccl7
-rw-r--r--Carpet/CarpetLib/src/backtrace.cc42
-rw-r--r--Carpet/CarpetLib/src/backtrace.hh2
-rw-r--r--Carpet/CarpetLib/test/backtrace.par10
5 files changed, 57 insertions, 10 deletions
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 <cctk.h>
+
#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 <cctk_Parameters.h>
#include "dist.hh"
+
+#include <cctk.h>
+#include <cctk_Parameters.h>
+#include <cstring>
#include <fstream>
#include <ostream>
@@ -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 <address>'.\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 <cctk.h>
+#include <cctk_Arguments.h>
+
+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