Reviewers: Søren Gjesse, Description: Ignore debug break events when bootstrapper is active. Collecting debug data when the context is not yet setup may lead to subtle errors like in the following Chromium bug: http://crbug.com/28933
Please review this at http://codereview.chromium.org/497006 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/execution.cc M test/cctest/test-debug.cc Index: test/cctest/test-debug.cc =================================================================== --- test/cctest/test-debug.cc (revision 3463) +++ test/cctest/test-debug.cc (working copy) @@ -3141,7 +3141,40 @@ CheckDebuggerUnloaded(); } +static const char* kSimpleExtensionSource = + "(function Foo() {" + " return 4;" + "})() "; +// http://crbug.com/28933 +// Test that debug break is disabled when bootstrapper is active. +TEST(NoBreakWhenBootstrapping) { + v8::HandleScope scope; + + // Register a debug event listener which sets the break flag and counts. + v8::Debug::SetDebugEventListener(DebugEventCounter); + + // Set the debug break flag. + v8::Debug::DebugBreak(); + break_point_hit_count = 0; + { + // Create a context with an extension to make sure that some JavaScript + // code is executed during bootstrapping. + v8::RegisterExtension(new v8::Extension("simpletest", + kSimpleExtensionSource)); + const char* extension_names[] = { "simpletest" }; + v8::ExtensionConfiguration extensions(1, extension_names); + v8::Persistent<v8::Context> context = v8::Context::New(&extensions); + context.Dispose(); + } + // Check that no DebugBreak events occured during the context creation. + CHECK_EQ(0, break_point_hit_count); + + // Get rid of the debug event listener. + v8::Debug::SetDebugEventListener(NULL); + CheckDebuggerUnloaded(); +} + static v8::Handle<v8::Array> NamedEnum(const v8::AccessorInfo&) { v8::Handle<v8::Array> result = v8::Array::New(3); result->Set(v8::Integer::New(0), v8::String::New("a")); Index: src/execution.cc =================================================================== --- src/execution.cc (revision 3463) +++ src/execution.cc (working copy) @@ -30,6 +30,7 @@ #include "v8.h" #include "api.h" +#include "bootstrapper.h" #include "codegen-inl.h" #include "debug.h" #include "simulator.h" @@ -607,6 +608,11 @@ return Heap::undefined_value(); } + // Ignore debug break during bootstrapping. + if (Bootstrapper::IsActive()) { + return Heap::undefined_value(); + } + { JavaScriptFrameIterator it; ASSERT(!it.done()); -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
