diff options
author | rvargas <rvargas@chromium.org> | 2014-12-04 11:47:22 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-04 19:47:49 +0000 |
commit | 9e9ce3c56b155d66c4ee324edd19db6fe35fb876 (patch) | |
tree | 52eb9091207041659c8e76a77f5f864639cac867 /base/debug | |
parent | 623980e4bbf33a79f83e08cf0b6e3cba6d2754cf (diff) | |
download | chromium_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.cc | 43 | ||||
-rw-r--r-- | base/debug/debugger_win.cc | 4 |
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 |