Commit e88df5b7 authored by yurys@chromium.org's avatar yurys@chromium.org

Ignore debug break events when bootstrapper is active. Collecting debug data...

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
Review URL: http://codereview.chromium.org/497006

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3465 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent fce227ea
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "v8.h" #include "v8.h"
#include "api.h" #include "api.h"
#include "bootstrapper.h"
#include "codegen-inl.h" #include "codegen-inl.h"
#include "debug.h" #include "debug.h"
#include "simulator.h" #include "simulator.h"
...@@ -607,6 +608,11 @@ Object* Execution::DebugBreakHelper() { ...@@ -607,6 +608,11 @@ Object* Execution::DebugBreakHelper() {
return Heap::undefined_value(); return Heap::undefined_value();
} }
// Ignore debug break during bootstrapping.
if (Bootstrapper::IsActive()) {
return Heap::undefined_value();
}
{ {
JavaScriptFrameIterator it; JavaScriptFrameIterator it;
ASSERT(!it.done()); ASSERT(!it.done());
......
...@@ -3141,6 +3141,39 @@ TEST(DisableBreak) { ...@@ -3141,6 +3141,39 @@ TEST(DisableBreak) {
CheckDebuggerUnloaded(); 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&) { static v8::Handle<v8::Array> NamedEnum(const v8::AccessorInfo&) {
v8::Handle<v8::Array> result = v8::Array::New(3); v8::Handle<v8::Array> result = v8::Array::New(3);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment