summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorrvargas <rvargas@chromium.org>2014-12-04 11:47:22 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-04 19:47:49 +0000
commit9e9ce3c56b155d66c4ee324edd19db6fe35fb876 (patch)
tree52eb9091207041659c8e76a77f5f864639cac867 /base
parent623980e4bbf33a79f83e08cf0b6e3cba6d2754cf (diff)
downloadchromium_src-9e9ce3c56b155d66c4ee324edd19db6fe35fb876.zip
chromium_src-9e9ce3c56b155d66c4ee324edd19db6fe35fb876.tar.gz
chromium_src-9e9ce3c56b155d66c4ee324edd19db6fe35fb876.tar.bz2
Don't call exit() after __debugbreak() on release builds.
This CL optimizes code for debugging as opposed to for someone who attaches a debugger and goes beyond a CHECK without realizing it. Debugging a release build is already hard, especially on 64-bit builds. BUG=408820 R=wfh@chromium.org Review URL: https://codereview.chromium.org/759283005 Cr-Commit-Position: refs/heads/master@{#306871}
Diffstat (limited to 'base')
-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