Change the handling of OS::Abort on Windows to enter the debugger if the process...
authorsgjesse@chromium.org <sgjesse@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 20 Nov 2008 10:00:36 +0000 (10:00 +0000)
committersgjesse@chromium.org <sgjesse@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 20 Nov 2008 10:00:36 +0000 (10:00 +0000)
Review URL: http://codereview.chromium.org/11522

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@802 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/platform-win32.cc

index 055008ef31356cace24aebdc26db45916684aa36..5260a7b14600d7be9eeecc5efc6333b67bfc7817 100644 (file)
 #ifndef NOMCX
 #define NOMCX
 #endif
+// Require Windows 2000 or higher (this is required for the IsDebuggerPresent
+// function to be present).
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x500
+#endif
 
 #include <windows.h>
 
@@ -781,10 +786,14 @@ void OS::Sleep(int milliseconds) {
 
 
 void OS::Abort() {
-  // Make the MSVCRT do a silent abort.
-  _set_abort_behavior(0, _WRITE_ABORT_MSG);
-  _set_abort_behavior(0, _CALL_REPORTFAULT);
-  abort();
+  if (!IsDebuggerPresent()) {
+    // Make the MSVCRT do a silent abort.
+    _set_abort_behavior(0, _WRITE_ABORT_MSG);
+    _set_abort_behavior(0, _CALL_REPORTFAULT);
+    abort();
+  } else {
+    DebugBreak();
+  }
 }