Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Side by Side Diff: test/cctest/test-debug.cc

Issue 582953002: Revert "Require V8 to be explicitly initialized before an Isolate is created" (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/cctest/test-dataflow.cc ('k') | test/cctest/test-deoptimization.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 // Size of temp buffer for formatting small strings. 66 // Size of temp buffer for formatting small strings.
67 #define SMALL_STRING_BUFFER_SIZE 80 67 #define SMALL_STRING_BUFFER_SIZE 80
68 68
69 // --- H e l p e r C l a s s e s 69 // --- H e l p e r C l a s s e s
70 70
71 71
72 // Helper class for creating a V8 enviromnent for running tests 72 // Helper class for creating a V8 enviromnent for running tests
73 class DebugLocalContext { 73 class DebugLocalContext {
74 public: 74 public:
75 inline DebugLocalContext( 75 inline DebugLocalContext(
76 v8::Isolate* isolate, v8::ExtensionConfiguration* extensions = 0,
77 v8::Handle<v8::ObjectTemplate> global_template =
78 v8::Handle<v8::ObjectTemplate>(),
79 v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>())
80 : scope_(isolate),
81 context_(v8::Context::New(isolate, extensions, global_template,
82 global_object)) {
83 context_->Enter();
84 }
85 inline DebugLocalContext(
86 v8::ExtensionConfiguration* extensions = 0, 76 v8::ExtensionConfiguration* extensions = 0,
87 v8::Handle<v8::ObjectTemplate> global_template = 77 v8::Handle<v8::ObjectTemplate> global_template =
88 v8::Handle<v8::ObjectTemplate>(), 78 v8::Handle<v8::ObjectTemplate>(),
89 v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>()) 79 v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>())
90 : scope_(CcTest::isolate()), 80 : scope_(CcTest::isolate()),
91 context_(v8::Context::New(CcTest::isolate(), extensions, 81 context_(
92 global_template, global_object)) { 82 v8::Context::New(CcTest::isolate(),
83 extensions,
84 global_template,
85 global_object)) {
93 context_->Enter(); 86 context_->Enter();
94 } 87 }
95 inline ~DebugLocalContext() { 88 inline ~DebugLocalContext() {
96 context_->Exit(); 89 context_->Exit();
97 } 90 }
98 inline v8::Local<v8::Context> context() { return context_; } 91 inline v8::Local<v8::Context> context() { return context_; }
99 inline v8::Context* operator->() { return *context_; } 92 inline v8::Context* operator->() { return *context_; }
100 inline v8::Context* operator*() { return *context_; } 93 inline v8::Context* operator*() { return *context_; }
101 inline v8::Isolate* GetIsolate() { return context_->GetIsolate(); } 94 inline v8::Isolate* GetIsolate() { return context_->GetIsolate(); }
102 inline bool IsReady() { return !context_.IsEmpty(); } 95 inline bool IsReady() { return !context_.IsEmpty(); }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 return v8::Local<v8::Function>::Cast((*env)->Global()->Get( 130 return v8::Local<v8::Function>::Cast((*env)->Global()->Get(
138 v8::String::NewFromUtf8(env->GetIsolate(), function_name))); 131 v8::String::NewFromUtf8(env->GetIsolate(), function_name)));
139 } 132 }
140 133
141 134
142 // Compile and run the supplied source and return the requested function. 135 // Compile and run the supplied source and return the requested function.
143 static v8::Local<v8::Function> CompileFunction(v8::Isolate* isolate, 136 static v8::Local<v8::Function> CompileFunction(v8::Isolate* isolate,
144 const char* source, 137 const char* source,
145 const char* function_name) { 138 const char* function_name) {
146 v8::Script::Compile(v8::String::NewFromUtf8(isolate, source))->Run(); 139 v8::Script::Compile(v8::String::NewFromUtf8(isolate, source))->Run();
147 v8::Local<v8::Object> global = isolate->GetCurrentContext()->Global(); 140 v8::Local<v8::Object> global =
141 CcTest::isolate()->GetCurrentContext()->Global();
148 return v8::Local<v8::Function>::Cast( 142 return v8::Local<v8::Function>::Cast(
149 global->Get(v8::String::NewFromUtf8(isolate, function_name))); 143 global->Get(v8::String::NewFromUtf8(isolate, function_name)));
150 } 144 }
151 145
152 146
153 // Is there any debug info for the function? 147 // Is there any debug info for the function?
154 static bool HasDebugInfo(v8::Handle<v8::Function> fun) { 148 static bool HasDebugInfo(v8::Handle<v8::Function> fun) {
155 Handle<v8::internal::JSFunction> f = v8::Utils::OpenHandle(*fun); 149 Handle<v8::internal::JSFunction> f = v8::Utils::OpenHandle(*fun);
156 Handle<v8::internal::SharedFunctionInfo> shared(f->shared()); 150 Handle<v8::internal::SharedFunctionInfo> shared(f->shared());
157 return Debug::HasDebugInfo(shared); 151 return Debug::HasDebugInfo(shared);
(...skipping 4996 matching lines...) Expand 10 before | Expand all | Expand 10 after
5154 * debugger thread. It then changes the value of a 5148 * debugger thread. It then changes the value of a
5155 * global object, to make the loop terminate. 5149 * global object, to make the loop terminate.
5156 */ 5150 */
5157 5151
5158 Barriers threaded_debugging_barriers; 5152 Barriers threaded_debugging_barriers;
5159 5153
5160 class V8Thread : public v8::base::Thread { 5154 class V8Thread : public v8::base::Thread {
5161 public: 5155 public:
5162 V8Thread() : Thread(Options("V8Thread")) {} 5156 V8Thread() : Thread(Options("V8Thread")) {}
5163 void Run(); 5157 void Run();
5164 v8::Isolate* isolate() { return isolate_; }
5165
5166 private:
5167 v8::Isolate* isolate_;
5168 }; 5158 };
5169 5159
5170 class DebuggerThread : public v8::base::Thread { 5160 class DebuggerThread : public v8::base::Thread {
5171 public: 5161 public:
5172 explicit DebuggerThread(v8::Isolate* isolate) 5162 DebuggerThread() : Thread(Options("DebuggerThread")) {}
5173 : Thread(Options("DebuggerThread")), isolate_(isolate) {}
5174 void Run(); 5163 void Run();
5175
5176 private:
5177 v8::Isolate* isolate_;
5178 }; 5164 };
5179 5165
5180 5166
5181 static void ThreadedAtBarrier1( 5167 static void ThreadedAtBarrier1(
5182 const v8::FunctionCallbackInfo<v8::Value>& args) { 5168 const v8::FunctionCallbackInfo<v8::Value>& args) {
5183 threaded_debugging_barriers.barrier_1.Wait(); 5169 threaded_debugging_barriers.barrier_1.Wait();
5184 } 5170 }
5185 5171
5186 5172
5187 static void ThreadedMessageHandler(const v8::Debug::Message& message) { 5173 static void ThreadedMessageHandler(const v8::Debug::Message& message) {
(...skipping 22 matching lines...) Expand all
5210 " while ( flag == true ) {\n" 5196 " while ( flag == true ) {\n"
5211 " if ( x == 1 ) {\n" 5197 " if ( x == 1 ) {\n"
5212 " ThreadedAtBarrier1();\n" 5198 " ThreadedAtBarrier1();\n"
5213 " }\n" 5199 " }\n"
5214 " x = x + 1;\n" 5200 " x = x + 1;\n"
5215 " }\n" 5201 " }\n"
5216 "}\n" 5202 "}\n"
5217 "\n" 5203 "\n"
5218 "foo();\n"; 5204 "foo();\n";
5219 5205
5220 isolate_ = v8::Isolate::New(); 5206 v8::Isolate* isolate = CcTest::isolate();
5221 threaded_debugging_barriers.barrier_3.Wait(); 5207 v8::Isolate::Scope isolate_scope(isolate);
5222 { 5208 DebugLocalContext env;
5223 v8::Isolate::Scope isolate_scope(isolate_); 5209 v8::HandleScope scope(env->GetIsolate());
5224 DebugLocalContext env(isolate_); 5210 v8::Debug::SetMessageHandler(&ThreadedMessageHandler);
5225 v8::HandleScope scope(isolate_); 5211 v8::Handle<v8::ObjectTemplate> global_template =
5226 v8::Debug::SetMessageHandler(&ThreadedMessageHandler); 5212 v8::ObjectTemplate::New(env->GetIsolate());
5227 v8::Handle<v8::ObjectTemplate> global_template = 5213 global_template->Set(
5228 v8::ObjectTemplate::New(env->GetIsolate()); 5214 v8::String::NewFromUtf8(env->GetIsolate(), "ThreadedAtBarrier1"),
5229 global_template->Set( 5215 v8::FunctionTemplate::New(isolate, ThreadedAtBarrier1));
5230 v8::String::NewFromUtf8(env->GetIsolate(), "ThreadedAtBarrier1"), 5216 v8::Handle<v8::Context> context = v8::Context::New(isolate,
5231 v8::FunctionTemplate::New(isolate_, ThreadedAtBarrier1)); 5217 NULL,
5232 v8::Handle<v8::Context> context = 5218 global_template);
5233 v8::Context::New(isolate_, NULL, global_template); 5219 v8::Context::Scope context_scope(context);
5234 v8::Context::Scope context_scope(context);
5235 5220
5236 CompileRun(source); 5221 CompileRun(source);
5237 }
5238 isolate_->Dispose();
5239 } 5222 }
5240 5223
5241 5224
5242 void DebuggerThread::Run() { 5225 void DebuggerThread::Run() {
5243 const int kBufSize = 1000; 5226 const int kBufSize = 1000;
5244 uint16_t buffer[kBufSize]; 5227 uint16_t buffer[kBufSize];
5245 5228
5246 const char* command_1 = "{\"seq\":102," 5229 const char* command_1 = "{\"seq\":102,"
5247 "\"type\":\"request\"," 5230 "\"type\":\"request\","
5248 "\"command\":\"evaluate\"," 5231 "\"command\":\"evaluate\","
5249 "\"arguments\":{\"expression\":\"bar(false)\"}}"; 5232 "\"arguments\":{\"expression\":\"bar(false)\"}}";
5250 const char* command_2 = "{\"seq\":103," 5233 const char* command_2 = "{\"seq\":103,"
5251 "\"type\":\"request\"," 5234 "\"type\":\"request\","
5252 "\"command\":\"continue\"}"; 5235 "\"command\":\"continue\"}";
5253 5236
5237 v8::Isolate* isolate = CcTest::isolate();
5254 threaded_debugging_barriers.barrier_1.Wait(); 5238 threaded_debugging_barriers.barrier_1.Wait();
5255 v8::Debug::DebugBreak(isolate_); 5239 v8::Debug::DebugBreak(isolate);
5256 threaded_debugging_barriers.barrier_2.Wait(); 5240 threaded_debugging_barriers.barrier_2.Wait();
5257 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_1, buffer)); 5241 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_1, buffer));
5258 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_2, buffer)); 5242 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_2, buffer));
5259 } 5243 }
5260 5244
5261 5245
5262 TEST(ThreadedDebugging) { 5246 TEST(ThreadedDebugging) {
5247 DebuggerThread debugger_thread;
5263 V8Thread v8_thread; 5248 V8Thread v8_thread;
5264 5249
5265 // Create a V8 environment 5250 // Create a V8 environment
5266 v8_thread.Start(); 5251 v8_thread.Start();
5267 threaded_debugging_barriers.barrier_3.Wait();
5268 DebuggerThread debugger_thread(v8_thread.isolate());
5269 debugger_thread.Start(); 5252 debugger_thread.Start();
5270 5253
5271 v8_thread.Join(); 5254 v8_thread.Join();
5272 debugger_thread.Join(); 5255 debugger_thread.Join();
5273 } 5256 }
5274 5257
5275 5258
5276 /* Test RecursiveBreakpoints */ 5259 /* Test RecursiveBreakpoints */
5277 /* In this test, the debugger evaluates a function with a breakpoint, after 5260 /* In this test, the debugger evaluates a function with a breakpoint, after
5278 * hitting a breakpoint in another function. We do this with both values 5261 * hitting a breakpoint in another function. We do this with both values
5279 * of the flag enabling recursive breakpoints, and verify that the second 5262 * of the flag enabling recursive breakpoints, and verify that the second
5280 * breakpoint is hit when enabled, and missed when disabled. 5263 * breakpoint is hit when enabled, and missed when disabled.
5281 */ 5264 */
5282 5265
5283 class BreakpointsV8Thread : public v8::base::Thread { 5266 class BreakpointsV8Thread : public v8::base::Thread {
5284 public: 5267 public:
5285 BreakpointsV8Thread() : Thread(Options("BreakpointsV8Thread")) {} 5268 BreakpointsV8Thread() : Thread(Options("BreakpointsV8Thread")) {}
5286 void Run(); 5269 void Run();
5287
5288 v8::Isolate* isolate() { return isolate_; }
5289
5290 private:
5291 v8::Isolate* isolate_;
5292 }; 5270 };
5293 5271
5294 class BreakpointsDebuggerThread : public v8::base::Thread { 5272 class BreakpointsDebuggerThread : public v8::base::Thread {
5295 public: 5273 public:
5296 BreakpointsDebuggerThread(bool global_evaluate, v8::Isolate* isolate) 5274 explicit BreakpointsDebuggerThread(bool global_evaluate)
5297 : Thread(Options("BreakpointsDebuggerThread")), 5275 : Thread(Options("BreakpointsDebuggerThread")),
5298 global_evaluate_(global_evaluate), 5276 global_evaluate_(global_evaluate) {}
5299 isolate_(isolate) {}
5300 void Run(); 5277 void Run();
5301 5278
5302 private: 5279 private:
5303 bool global_evaluate_; 5280 bool global_evaluate_;
5304 v8::Isolate* isolate_;
5305 }; 5281 };
5306 5282
5307 5283
5308 Barriers* breakpoints_barriers; 5284 Barriers* breakpoints_barriers;
5309 int break_event_breakpoint_id; 5285 int break_event_breakpoint_id;
5310 int evaluate_int_result; 5286 int evaluate_int_result;
5311 5287
5312 static void BreakpointsMessageHandler(const v8::Debug::Message& message) { 5288 static void BreakpointsMessageHandler(const v8::Debug::Message& message) {
5313 static char print_buffer[1000]; 5289 static char print_buffer[1000];
5314 v8::String::Value json(message.GetJSON()); 5290 v8::String::Value json(message.GetJSON());
(...skipping 24 matching lines...) Expand all
5339 " var x = 1;\n" 5315 " var x = 1;\n"
5340 " x = y_global;" 5316 " x = y_global;"
5341 " var z = 3;" 5317 " var z = 3;"
5342 " x += 100;\n" 5318 " x += 100;\n"
5343 " return x;\n" 5319 " return x;\n"
5344 "}\n" 5320 "}\n"
5345 "\n"; 5321 "\n";
5346 const char* source_2 = "cat(17);\n" 5322 const char* source_2 = "cat(17);\n"
5347 "cat(19);\n"; 5323 "cat(19);\n";
5348 5324
5349 isolate_ = v8::Isolate::New(); 5325 v8::Isolate* isolate = CcTest::isolate();
5350 breakpoints_barriers->barrier_3.Wait(); 5326 v8::Isolate::Scope isolate_scope(isolate);
5351 { 5327 DebugLocalContext env;
5352 v8::Isolate::Scope isolate_scope(isolate_); 5328 v8::HandleScope scope(isolate);
5353 DebugLocalContext env(isolate_); 5329 v8::Debug::SetMessageHandler(&BreakpointsMessageHandler);
5354 v8::HandleScope scope(isolate_);
5355 v8::Debug::SetMessageHandler(&BreakpointsMessageHandler);
5356 5330
5357 CompileRun(source_1); 5331 CompileRun(source_1);
5358 breakpoints_barriers->barrier_1.Wait(); 5332 breakpoints_barriers->barrier_1.Wait();
5359 breakpoints_barriers->barrier_2.Wait(); 5333 breakpoints_barriers->barrier_2.Wait();
5360 CompileRun(source_2); 5334 CompileRun(source_2);
5361 }
5362 isolate_->Dispose();
5363 } 5335 }
5364 5336
5365 5337
5366 void BreakpointsDebuggerThread::Run() { 5338 void BreakpointsDebuggerThread::Run() {
5367 const int kBufSize = 1000; 5339 const int kBufSize = 1000;
5368 uint16_t buffer[kBufSize]; 5340 uint16_t buffer[kBufSize];
5369 5341
5370 const char* command_1 = "{\"seq\":101," 5342 const char* command_1 = "{\"seq\":101,"
5371 "\"type\":\"request\"," 5343 "\"type\":\"request\","
5372 "\"command\":\"setbreakpoint\"," 5344 "\"command\":\"setbreakpoint\","
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
5418 command_7 = "{\"seq\":107," 5390 command_7 = "{\"seq\":107,"
5419 "\"type\":\"request\"," 5391 "\"type\":\"request\","
5420 "\"command\":\"evaluate\"," 5392 "\"command\":\"evaluate\","
5421 "\"arguments\":{\"expression\":\"dog()\",\"disable_break\":true}}"; 5393 "\"arguments\":{\"expression\":\"dog()\",\"disable_break\":true}}";
5422 } 5394 }
5423 const char* command_8 = "{\"seq\":108," 5395 const char* command_8 = "{\"seq\":108,"
5424 "\"type\":\"request\"," 5396 "\"type\":\"request\","
5425 "\"command\":\"continue\"}"; 5397 "\"command\":\"continue\"}";
5426 5398
5427 5399
5400 v8::Isolate* isolate = CcTest::isolate();
5401 v8::Isolate::Scope isolate_scope(isolate);
5428 // v8 thread initializes, runs source_1 5402 // v8 thread initializes, runs source_1
5429 breakpoints_barriers->barrier_1.Wait(); 5403 breakpoints_barriers->barrier_1.Wait();
5430 // 1:Set breakpoint in cat() (will get id 1). 5404 // 1:Set breakpoint in cat() (will get id 1).
5431 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_1, buffer)); 5405 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_1, buffer));
5432 // 2:Set breakpoint in dog() (will get id 2). 5406 // 2:Set breakpoint in dog() (will get id 2).
5433 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_2, buffer)); 5407 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_2, buffer));
5434 breakpoints_barriers->barrier_2.Wait(); 5408 breakpoints_barriers->barrier_2.Wait();
5435 // V8 thread starts compiling source_2. 5409 // V8 thread starts compiling source_2.
5436 // Automatic break happens, to run queued commands 5410 // Automatic break happens, to run queued commands
5437 // breakpoints_barriers->semaphore_1.Wait(); 5411 // breakpoints_barriers->semaphore_1.Wait();
5438 // Commands 1 through 3 run, thread continues. 5412 // Commands 1 through 3 run, thread continues.
5439 // v8 thread runs source_2 to breakpoint in cat(). 5413 // v8 thread runs source_2 to breakpoint in cat().
5440 // message callback receives break event. 5414 // message callback receives break event.
5441 breakpoints_barriers->semaphore_1.Wait(); 5415 breakpoints_barriers->semaphore_1.Wait();
5442 // Must have hit breakpoint #1. 5416 // Must have hit breakpoint #1.
5443 CHECK_EQ(1, break_event_breakpoint_id); 5417 CHECK_EQ(1, break_event_breakpoint_id);
5444 // 4:Evaluate dog() (which has a breakpoint). 5418 // 4:Evaluate dog() (which has a breakpoint).
5445 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_3, buffer)); 5419 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_3, buffer));
5446 // V8 thread hits breakpoint in dog(). 5420 // V8 thread hits breakpoint in dog().
5447 breakpoints_barriers->semaphore_1.Wait(); // wait for break event 5421 breakpoints_barriers->semaphore_1.Wait(); // wait for break event
5448 // Must have hit breakpoint #2. 5422 // Must have hit breakpoint #2.
5449 CHECK_EQ(2, break_event_breakpoint_id); 5423 CHECK_EQ(2, break_event_breakpoint_id);
5450 // 5:Evaluate (x + 1). 5424 // 5:Evaluate (x + 1).
5451 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_4, buffer)); 5425 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_4, buffer));
5452 // Evaluate (x + 1) finishes. 5426 // Evaluate (x + 1) finishes.
5453 breakpoints_barriers->semaphore_1.Wait(); 5427 breakpoints_barriers->semaphore_1.Wait();
5454 // Must have result 108. 5428 // Must have result 108.
5455 CHECK_EQ(108, evaluate_int_result); 5429 CHECK_EQ(108, evaluate_int_result);
5456 // 6:Continue evaluation of dog(). 5430 // 6:Continue evaluation of dog().
5457 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_5, buffer)); 5431 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_5, buffer));
5458 // Evaluate dog() finishes. 5432 // Evaluate dog() finishes.
5459 breakpoints_barriers->semaphore_1.Wait(); 5433 breakpoints_barriers->semaphore_1.Wait();
5460 // Must have result 107. 5434 // Must have result 107.
5461 CHECK_EQ(107, evaluate_int_result); 5435 CHECK_EQ(107, evaluate_int_result);
5462 // 7:Continue evaluation of source_2, finish cat(17), hit breakpoint 5436 // 7:Continue evaluation of source_2, finish cat(17), hit breakpoint
5463 // in cat(19). 5437 // in cat(19).
5464 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_6, buffer)); 5438 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_6, buffer));
5465 // Message callback gets break event. 5439 // Message callback gets break event.
5466 breakpoints_barriers->semaphore_1.Wait(); // wait for break event 5440 breakpoints_barriers->semaphore_1.Wait(); // wait for break event
5467 // Must have hit breakpoint #1. 5441 // Must have hit breakpoint #1.
5468 CHECK_EQ(1, break_event_breakpoint_id); 5442 CHECK_EQ(1, break_event_breakpoint_id);
5469 // 8: Evaluate dog() with breaks disabled. 5443 // 8: Evaluate dog() with breaks disabled.
5470 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_7, buffer)); 5444 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_7, buffer));
5471 // Evaluate dog() finishes. 5445 // Evaluate dog() finishes.
5472 breakpoints_barriers->semaphore_1.Wait(); 5446 breakpoints_barriers->semaphore_1.Wait();
5473 // Must have result 116. 5447 // Must have result 116.
5474 CHECK_EQ(116, evaluate_int_result); 5448 CHECK_EQ(116, evaluate_int_result);
5475 // 9: Continue evaluation of source2, reach end. 5449 // 9: Continue evaluation of source2, reach end.
5476 v8::Debug::SendCommand(isolate_, buffer, AsciiToUtf16(command_8, buffer)); 5450 v8::Debug::SendCommand(isolate, buffer, AsciiToUtf16(command_8, buffer));
5477 } 5451 }
5478 5452
5479 5453
5480 void TestRecursiveBreakpointsGeneric(bool global_evaluate) { 5454 void TestRecursiveBreakpointsGeneric(bool global_evaluate) {
5455 BreakpointsDebuggerThread breakpoints_debugger_thread(global_evaluate);
5481 BreakpointsV8Thread breakpoints_v8_thread; 5456 BreakpointsV8Thread breakpoints_v8_thread;
5482 5457
5483 // Create a V8 environment 5458 // Create a V8 environment
5484 Barriers stack_allocated_breakpoints_barriers; 5459 Barriers stack_allocated_breakpoints_barriers;
5485 breakpoints_barriers = &stack_allocated_breakpoints_barriers; 5460 breakpoints_barriers = &stack_allocated_breakpoints_barriers;
5486 5461
5487 breakpoints_v8_thread.Start(); 5462 breakpoints_v8_thread.Start();
5488 breakpoints_barriers->barrier_3.Wait();
5489 BreakpointsDebuggerThread breakpoints_debugger_thread(
5490 global_evaluate, breakpoints_v8_thread.isolate());
5491 breakpoints_debugger_thread.Start(); 5463 breakpoints_debugger_thread.Start();
5492 5464
5493 breakpoints_v8_thread.Join(); 5465 breakpoints_v8_thread.Join();
5494 breakpoints_debugger_thread.Join(); 5466 breakpoints_debugger_thread.Join();
5495 } 5467 }
5496 5468
5497 5469
5498 TEST(RecursiveBreakpoints) { 5470 TEST(RecursiveBreakpoints) {
5499 TestRecursiveBreakpointsGeneric(false); 5471 TestRecursiveBreakpointsGeneric(false);
5500 } 5472 }
(...skipping 1981 matching lines...) Expand 10 before | Expand all | Expand 10 after
7482 v8::Isolate* isolate = env->GetIsolate(); 7454 v8::Isolate* isolate = env->GetIsolate();
7483 v8::HandleScope scope(isolate); 7455 v8::HandleScope scope(isolate);
7484 v8::Debug::SetDebugEventListener(DebugBreakTriggerTerminate); 7456 v8::Debug::SetDebugEventListener(DebugBreakTriggerTerminate);
7485 TerminationThread terminator(isolate); 7457 TerminationThread terminator(isolate);
7486 terminator.Start(); 7458 terminator.Start();
7487 v8::TryCatch try_catch; 7459 v8::TryCatch try_catch;
7488 v8::Debug::DebugBreak(isolate); 7460 v8::Debug::DebugBreak(isolate);
7489 CompileRun("while (true);"); 7461 CompileRun("while (true);");
7490 CHECK(try_catch.HasTerminated()); 7462 CHECK(try_catch.HasTerminated());
7491 } 7463 }
OLDNEW
« no previous file with comments | « test/cctest/test-dataflow.cc ('k') | test/cctest/test-deoptimization.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698