Revision: 14772
Author:   [email protected]
Date:     Thu May 23 03:49:13 2013
Log:      Merged r14185 into 3.14 branch.

Add an option to dump core when an uncaught exception is thrown.

This is done as a courtesy to node.js, as its current stable version (0.10)
relies on V8 version 3.14.5.

[email protected]
BUG=

Review URL: https://chromiumcodereview.appspot.com/15858003
http://code.google.com/p/v8/source/detail?r=14772

Modified:
 /branches/3.14/src/flag-definitions.h
 /branches/3.14/src/isolate.cc
 /branches/3.14/src/version.cc

=======================================
--- /branches/3.14/src/flag-definitions.h       Mon Oct 22 06:09:53 2012
+++ /branches/3.14/src/flag-definitions.h       Thu May 23 03:49:13 2013
@@ -449,6 +449,8 @@
            "Stack alingment in bytes in simulator (4 or 8, 8 is default)")

 // isolate.cc
+DEFINE_bool(abort_on_uncaught_exception, false,
+ "abort program (dump core) when an uncaught exception is thrown")
 DEFINE_bool(trace_exception, false,
             "print stack trace when throwing exceptions")
 DEFINE_bool(preallocate_message_memory, false,
=======================================
--- /branches/3.14/src/isolate.cc       Wed Sep  5 09:44:50 2012
+++ /branches/3.14/src/isolate.cc       Thu May 23 03:49:13 2013
@@ -1080,6 +1080,7 @@
   return false;
 }

+static int fatal_exception_depth = 0;

 void Isolate::DoThrow(Object* exception, MessageLocation* location) {
   ASSERT(!has_pending_exception());
@@ -1150,6 +1151,20 @@
thread_local_top()->pending_message_start_pos_ = location->start_pos();
         thread_local_top()->pending_message_end_pos_ = location->end_pos();
       }
+
+      // If the abort-on-uncaught-exception flag is specified, abort on any
+ // exception not caught by JavaScript, even when an external handler is + // present. This flag is intended for use by JavaScript developers, so
+      // print a user-friendly stack trace (not an internal one).
+      if (fatal_exception_depth == 0 &&
+          FLAG_abort_on_uncaught_exception &&
+          (report_exception || can_be_caught_externally)) {
+        fatal_exception_depth++;
+        fprintf(stderr, "%s\n\nFROM\n",
+          *MessageHandler::GetLocalizedMessage(this, message_obj));
+        PrintCurrentStackTrace(stderr);
+        OS::Abort();
+      }
     } else if (location != NULL && !location->script().is_null()) {
       // We are bootstrapping and caught an error where the location is set
       // and we have a script for the location.
=======================================
--- /branches/3.14/src/version.cc       Mon Mar  4 05:04:30 2013
+++ /branches/3.14/src/version.cc       Thu May 23 03:49:13 2013
@@ -35,7 +35,7 @@
 #define MAJOR_VERSION     3
 #define MINOR_VERSION     14
 #define BUILD_NUMBER      5
-#define PATCH_LEVEL       8
+#define PATCH_LEVEL       9
 // Use 1 for candidates and 0 otherwise.
 // (Boolean macro values are not supported by all preprocessors.)
 #define IS_CANDIDATE_VERSION 0

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to