Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(660)

Unified Diff: base/debug_util_unittest.cc

Issue 62140: Print backtraces on FATAL log messages in debug mode. (Closed)
Patch Set: Add todo for stackwalk64 Created 11 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/debug_util_posix.cc ('k') | base/debug_util_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug_util_unittest.cc
diff --git a/base/debug_util_unittest.cc b/base/debug_util_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2636e45f04cc4f2ecc88ca803cbf0ef438992253
--- /dev/null
+++ b/base/debug_util_unittest.cc
@@ -0,0 +1,72 @@
+// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <sstream>
+#include <string>
+
+#include "base/debug_util.h"
+#include "base/logging.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+TEST(StackTrace, OutputToStream) {
+ StackTrace trace;
+
+ // Dump the trace into a string.
+ std::ostringstream os;
+ trace.OutputToStream(&os);
+ std::string backtrace_message = os.str();
+
+ size_t frames_found = 0;
+ trace.Addresses(&frames_found);
+ if (frames_found == 0) {
+ LOG(ERROR) << "No stack frames found. Skipping rest of test.";
+ return;
+ }
+
+ // Check if the output has symbol initialization warning. If it does, fail.
+ if (backtrace_message.find("Dumping unresolved backtrace") !=
+ std::string::npos) {
+ LOG(ERROR) << "Unable to resolve symbols. Skipping rest of test.";
+ return;
+ }
+
+#if defined(OS_MACOSX)
+
+ // Symbol resolution via the backtrace_symbol funciton does not work well
+ // in OsX.
+ // See this thread:
+ //
+ // http://lists.apple.com/archives/darwin-dev/2009/Mar/msg00111.html
+ //
+ // Just check instead that we find our way back to the "start" symbol
+ // which should be the first symbol in the trace.
+ //
+ // TODO(port): Find a more reliable way to resolve symbols.
+
+ // Expect to at least find main.
+ EXPECT_TRUE(backtrace_message.find("start") != std::string::npos)
+ << "Expected to find start in backtrace:\n"
+ << backtrace_message;
+
+#else // defined(OS_MACOSX)
+
+ // Expect to at least find main.
+ EXPECT_TRUE(backtrace_message.find("main") != std::string::npos)
+ << "Expected to find main in backtrace:\n"
+ << backtrace_message;
+
+#if defined(OS_WIN)
+// MSVC doesn't allow the use of C99's __func__ within C++, so we fake it with
+// MSVC's __FUNCTION__ macro.
+#define __func__ __FUNCTION__
+#endif
+
+ // Expect to find this function as well.
+ // Note: This will fail if not linked with -rdynamic (aka -export_dynamic)
+ EXPECT_TRUE(backtrace_message.find(__func__) != std::string::npos)
+ << "Expected to find " << __func__ << " in backtrace:\n"
+ << backtrace_message;
+
+#endif // define(OS_MACOSX)
+}
« no previous file with comments | « base/debug_util_posix.cc ('k') | base/debug_util_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698