summaryrefslogtreecommitdiff
path: root/src/mongo/util/stacktrace.cpp
diff options
context:
space:
mode:
authorTad Marshall <tad@10gen.com>2012-12-16 12:05:06 -0500
committerTad Marshall <tad@10gen.com>2012-12-16 16:45:02 -0500
commitc5aa1730a511ecffcb7dab2f7b32b6ee607c933d (patch)
tree92e75ae230a2aa990a7ea94980481570300226fb /src/mongo/util/stacktrace.cpp
parent81a8d87fa7a1a614ca0e0c0c93c260052af541b9 (diff)
downloadmongo-c5aa1730a511ecffcb7dab2f7b32b6ee607c933d.tar.gz
SERVER-7956 Do not display dialog on CRT assertion, print stack trace
Use the C runtime "report hook" to handle reporting of C runtime assertions ourselves instead of having the C runtime do it. Log the message and print a stack trace to help with debugging.
Diffstat (limited to 'src/mongo/util/stacktrace.cpp')
-rw-r--r--src/mongo/util/stacktrace.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/mongo/util/stacktrace.cpp b/src/mongo/util/stacktrace.cpp
index 1926cd48c3b..ab405c9a717 100644
--- a/src/mongo/util/stacktrace.cpp
+++ b/src/mongo/util/stacktrace.cpp
@@ -295,6 +295,16 @@ namespace mongo {
log() << ss.str() << std::endl;
}
}
+
+ // Print error message from C runtime followed by stack trace
+ int crtDebugCallback(int, char* originalMessage, int*) {
+ StringData message(originalMessage);
+ log() << "*** C runtime error: "
+ << message.substr(0, message.find('\n')) << std::endl;
+ printStackTrace();
+ return 1; // 0 == not handled, non-0 == handled
+ }
+
}
#else