summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/BUILD.gn1
-rw-r--r--base/base.gyp1
-rw-r--r--base/debug/debugger_unittest.cc43
-rw-r--r--base/debug/debugger_win.cc4
4 files changed, 46 insertions, 3 deletions
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 9128488..fe03aac 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -1148,6 +1148,7 @@ test("base_unittests") {
"containers/stack_container_unittest.cc",
"cpu_unittest.cc",
"debug/crash_logging_unittest.cc",
+ "debug/debugger_unittest.cc",
"debug/leak_tracker_unittest.cc",
"debug/proc_maps_linux_unittest.cc",
"debug/stack_trace_unittest.cc",
diff --git a/base/base.gyp b/base/base.gyp
index 64f88db..ec5444a 100644
--- a/base/base.gyp
+++ b/base/base.gyp
@@ -479,6 +479,7 @@
'containers/stack_container_unittest.cc',
'cpu_unittest.cc',
'debug/crash_logging_unittest.cc',
+ 'debug/debugger_unittest.cc',
'debug/leak_tracker_unittest.cc',
'debug/proc_maps_linux_unittest.cc',
'debug/stack_trace_unittest.cc',
diff --git a/base/debug/debugger_unittest.cc b/base/debug/debugger_unittest.cc
new file mode 100644
index 0000000..0a5a039
--- /dev/null
+++ b/base/debug/debugger_unittest.cc
@@ -0,0 +1,43 @@
+// Copyright 2014 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 "base/debug/debugger.h"
+
+#include "build/build_config.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+#if defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
+void CrashWithBreakDebugger() {
+ base::debug::SetSuppressDebugUI(false);
+ base::debug::BreakDebugger();
+
+#if defined(OS_WIN)
+ // This should not be executed.
+ _exit(125);
+#endif
+}
+#endif // defined(GTEST_HAS_DEATH_TEST)
+
+} // namespace
+
+// Death tests misbehave on Android.
+#if defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
+
+TEST(Debugger, CrashAtBreakpoint) {
+ EXPECT_DEATH(CrashWithBreakDebugger(), "");
+}
+
+#if defined(OS_WIN)
+TEST(Debugger, DoesntExecuteBeyondBreakpoint) {
+ EXPECT_EXIT(CrashWithBreakDebugger(),
+ ::testing::ExitedWithCode(0x80000003), "");
+}
+#endif // defined(OS_WIN)
+
+#else // defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
+TEST(Debugger, NoTest) {
+}
+#endif // defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
diff --git a/base/debug/debugger_win.cc b/base/debug/debugger_win.cc
index ccc9c16..a1d86e4 100644
--- a/base/debug/debugger_win.cc
+++ b/base/debug/debugger_win.cc
@@ -17,10 +17,8 @@ bool BeingDebugged() {
void BreakDebugger() {
if (IsDebugUISuppressed())
_exit(1);
+
__debugbreak();
-#if defined(NDEBUG)
- _exit(1);
-#endif
}
} // namespace debug