You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mxnet.apache.org by jx...@apache.org on 2017/12/12 21:45:02 UTC
[incubator-mxnet] branch master updated: Use backtrace from
dmlc-core with demangled C++ symbols on segfault (#8851)
This is an automated email from the ASF dual-hosted git repository.
jxie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git
The following commit(s) were added to refs/heads/master by this push:
new 3901f5f Use backtrace from dmlc-core with demangled C++ symbols on segfault (#8851)
3901f5f is described below
commit 3901f5f02c882878718dec9e7a90ccdd8aee33c6
Author: Pedro Larroy <92...@users.noreply.github.com>
AuthorDate: Tue Dec 12 21:44:58 2017 +0000
Use backtrace from dmlc-core with demangled C++ symbols on segfault (#8851)
---
CMakeLists.txt | 5 +++++
make/config.mk | 2 +-
src/initialize.cc | 26 ++++++--------------------
3 files changed, 12 insertions(+), 21 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4804793..8211624 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -47,6 +47,7 @@ mxnet_option(USE_MXNET_LIB_NAMING "Use MXNet library naming conventions." ON)
mxnet_option(USE_GPROF "Compile with gprof (profiling) flag" OFF)
mxnet_option(USE_VTUNE "Enable use of Intel Amplifier XE (VTune)" OFF) # one could set VTUNE_ROOT for search path
mxnet_option(INSTALL_EXAMPLES "Install the example source files." OFF)
+mxnet_option(USE_SIGNAL_HANDLER "Print stack traces on segfaults." OFF)
@@ -574,6 +575,10 @@ if (INSTALL_EXAMPLES)
install(DIRECTORY example DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
endif()
+if (USE_SIGNAL_HANDLER)
+ add_definitions(-DMXNET_USE_SIGNAL_HANDLER=1)
+endif()
+
# AUTO_INSTALL_DIR -> Optional: specify post-build install direcory
if(AUTO_INSTALL_DIR)
# ---[ Install Includes
diff --git a/make/config.mk b/make/config.mk
index 6db22df..9c6393a 100644
--- a/make/config.mk
+++ b/make/config.mk
@@ -33,7 +33,7 @@ DEBUG = 0
# whether compile with profiler
USE_PROFILER =
-# whether to turn on signal handler (e.g. segfault logger)
+# whether to turn on segfault signal handler to log the stack trace
USE_SIGNAL_HANDLER =
# the additional link flags you want to add
diff --git a/src/initialize.cc b/src/initialize.cc
index 56d6fe1..2d077f4 100644
--- a/src/initialize.cc
+++ b/src/initialize.cc
@@ -25,37 +25,23 @@
#include <signal.h>
#include <dmlc/logging.h>
#include <mxnet/engine.h>
-
#include "engine/profiler.h"
namespace mxnet {
-
-void segfault_logger(int sig) {
- const int MAX_STACK_SIZE = 10;
- void *stack[MAX_STACK_SIZE];
-
+#if MXNET_USE_SIGNAL_HANDLER && DMLC_LOG_STACK_TRACE
+static void SegfaultLogger(int sig) {
fprintf(stderr, "\nSegmentation fault: %d\n\n", sig);
-
-#if DMLC_LOG_STACK_TRACE
- int nframes = backtrace(stack, MAX_STACK_SIZE);
- fprintf(stderr, "Stack trace returned %d entries:\n", nframes);
- char **msgs = backtrace_symbols(stack, nframes);
- if (msgs != nullptr) {
- for (int i = 0; i < nframes; ++i) {
- fprintf(stderr, "[bt] (%d) %s\n", i, msgs[i]);
- }
- }
-#endif // DMLC_LOG_STACK_TRACE
-
+ fprintf(stderr, "%s", dmlc::StackTrace().c_str());
exit(-1);
}
+#endif
class LibraryInitializer {
public:
LibraryInitializer() {
dmlc::InitLogging("mxnet");
-#if MXNET_USE_SIGNAL_HANDLER
- signal(SIGSEGV, segfault_logger);
+#if MXNET_USE_SIGNAL_HANDLER && DMLC_LOG_STACK_TRACE
+ signal(SIGSEGV, SegfaultLogger);
#endif
#if MXNET_USE_PROFILER
// ensure profiler's constructor are called before atexit.
--
To stop receiving notification emails like this one, please contact
['"commits@mxnet.apache.org" <co...@mxnet.apache.org>'].