summaryrefslogtreecommitdiffstats
path: root/base/debug
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/debug
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/debug')
-rw-r--r--base/debug/debugger_unittest.cc43
-rw-r--r--base/debug/debugger_win.cc4
2 files changed, 44 insertions, 3 deletions
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