summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925>2009-05-05 23:13:43 +0000
committerzhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925>2009-05-05 23:13:43 +0000
commitb5460573abbb1a4c601e792aa2e912aca4fa2134 (patch)
tree7b897744aa871de2cda218509fe8d16bf11991ba
parent9e679604b268566da2451e7c23c5f80e6942f2f7 (diff)
downloadgoogletest-b5460573abbb1a4c601e792aa2e912aca4fa2134.tar.gz
Uses DebugBreak() to properly break on Windows (by Vlad Losev).
git-svn-id: http://googletest.googlecode.com/svn/trunk@248 861a406c-534a-0410-8894-cb66d6ee9925
-rw-r--r--src/gtest.cc7
-rwxr-xr-xtest/gtest_break_on_failure_unittest.py16
2 files changed, 23 insertions, 0 deletions
diff --git a/src/gtest.cc b/src/gtest.cc
index 4880767..6fc4044 100644
--- a/src/gtest.cc
+++ b/src/gtest.cc
@@ -3312,7 +3312,14 @@ void UnitTest::AddTestPartResult(TestPartResultType result_type,
// with another testing framework) and specify the former on the
// command line for debugging.
if (GTEST_FLAG(break_on_failure)) {
+#if GTEST_OS_WINDOWS
+ // Using DebugBreak on Windows allows gtest to still break into a debugger
+ // when a failure happens and both the --gtest_break_on_failure and
+ // the --gtest_catch_exceptions flags are specified.
+ DebugBreak();
+#else
*static_cast<int*>(NULL) = 1;
+#endif // GTEST_OS_WINDOWS
} else if (GTEST_FLAG(throw_on_failure)) {
#if GTEST_HAS_EXCEPTIONS
throw GoogleTestFailureException(result);
diff --git a/test/gtest_break_on_failure_unittest.py b/test/gtest_break_on_failure_unittest.py
index c9dd008..c312ce2 100755
--- a/test/gtest_break_on_failure_unittest.py
+++ b/test/gtest_break_on_failure_unittest.py
@@ -57,6 +57,9 @@ BREAK_ON_FAILURE_FLAG = 'gtest_break_on_failure'
# The environment variable for enabling/disabling the throw-on-failure mode.
THROW_ON_FAILURE_ENV_VAR = 'GTEST_THROW_ON_FAILURE'
+# The environment variable for enabling/disabling the catch-exceptions mode.
+CATCH_EXCEPTIONS_ENV_VAR = 'GTEST_CATCH_EXCEPTIONS'
+
# Path to the gtest_break_on_failure_unittest_ program.
EXE_PATH = gtest_test_utils.GetTestExecutablePath(
'gtest_break_on_failure_unittest_')
@@ -194,5 +197,18 @@ class GTestBreakOnFailureUnitTest(unittest.TestCase):
finally:
SetEnvVar(THROW_ON_FAILURE_ENV_VAR, None)
+ if IS_WINDOWS:
+ def testCatchExceptionsDoesNotInterfere(self):
+ """Tests that gtest_catch_exceptions doesn't interfere."""
+
+ SetEnvVar(CATCH_EXCEPTIONS_ENV_VAR, '1')
+ try:
+ self.RunAndVerify(env_var_value='1',
+ flag_value='1',
+ expect_seg_fault=1)
+ finally:
+ SetEnvVar(CATCH_EXCEPTIONS_ENV_VAR, None)
+
+
if __name__ == '__main__':
gtest_test_utils.Main()