| Index: test/cctest/test-debug.cc
|
| ===================================================================
|
| --- test/cctest/test-debug.cc (revision 5753)
|
| +++ test/cctest/test-debug.cc (working copy)
|
| @@ -902,6 +902,7 @@
|
| // Debug event handler which re-issues a debug break until a limit has been
|
| // reached.
|
| int max_break_point_hit_count = 0;
|
| +bool terminate_after_max_break_point_hit = false;
|
| static void DebugEventBreakMax(v8::DebugEvent event,
|
| v8::Handle<v8::Object> exec_state,
|
| v8::Handle<v8::Object> event_data,
|
| @@ -909,12 +910,17 @@
|
| // When hitting a debug event listener there must be a break set.
|
| CHECK_NE(v8::internal::Debug::break_id(), 0);
|
|
|
| - if (event == v8::Break && break_point_hit_count < max_break_point_hit_count) {
|
| - // Count the number of breaks.
|
| - break_point_hit_count++;
|
| + if (event == v8::Break) {
|
| + if (break_point_hit_count < max_break_point_hit_count) {
|
| + // Count the number of breaks.
|
| + break_point_hit_count++;
|
|
|
| - // Set the break flag again to come back here as soon as possible.
|
| - v8::Debug::DebugBreak();
|
| + // Set the break flag again to come back here as soon as possible.
|
| + v8::Debug::DebugBreak();
|
| + } else if (terminate_after_max_break_point_hit) {
|
| + // Terminate execution after the last break if requested.
|
| + v8::V8::TerminateExecution();
|
| + }
|
| }
|
| }
|
|
|
| @@ -6892,4 +6898,33 @@
|
| CheckDebuggerUnloaded();
|
| }
|
|
|
| +
|
| +// Test that setting the terminate execution flag during debug break processing.
|
| +TEST(DebugBreakLoop) {
|
| + v8::HandleScope scope;
|
| + DebugLocalContext env;
|
| +
|
| + // Receive 100 breaks and terminate.
|
| + max_break_point_hit_count = 100;
|
| + terminate_after_max_break_point_hit = true;
|
| +
|
| + // Register a debug event listener which sets the break flag and counts.
|
| + v8::Debug::SetDebugEventListener(DebugEventBreakMax);
|
| +
|
| + // Function with infinite loop.
|
| + CompileRun("function f() { while (true) { } }");
|
| +
|
| + // Set the debug break to enter the debugger as soon as possible.
|
| + v8::Debug::DebugBreak();
|
| +
|
| + // Call function with infinite loop.
|
| + CompileRun("f();");
|
| + CHECK_EQ(100, break_point_hit_count);
|
| +
|
| + // Get rid of the debug event listener.
|
| + v8::Debug::SetDebugEventListener(NULL);
|
| + CheckDebuggerUnloaded();
|
| +}
|
| +
|
| +
|
| #endif // ENABLE_DEBUGGER_SUPPORT
|
|
|