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

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

Issue 67266: Accompany debugger commands with senders data (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 8 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 | « src/debug-agent.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. 1 // Copyright 2007-2008 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 27 matching lines...) Expand all
38 38
39 using ::v8::internal::EmbeddedVector; 39 using ::v8::internal::EmbeddedVector;
40 using ::v8::internal::Object; 40 using ::v8::internal::Object;
41 using ::v8::internal::OS; 41 using ::v8::internal::OS;
42 using ::v8::internal::Handle; 42 using ::v8::internal::Handle;
43 using ::v8::internal::Heap; 43 using ::v8::internal::Heap;
44 using ::v8::internal::JSGlobalProxy; 44 using ::v8::internal::JSGlobalProxy;
45 using ::v8::internal::Code; 45 using ::v8::internal::Code;
46 using ::v8::internal::Debug; 46 using ::v8::internal::Debug;
47 using ::v8::internal::Debugger; 47 using ::v8::internal::Debugger;
48 using ::v8::internal::Message;
49 using ::v8::internal::MessageQueue;
48 using ::v8::internal::StepAction; 50 using ::v8::internal::StepAction;
49 using ::v8::internal::StepIn; // From StepAction enum 51 using ::v8::internal::StepIn; // From StepAction enum
50 using ::v8::internal::StepNext; // From StepAction enum 52 using ::v8::internal::StepNext; // From StepAction enum
51 using ::v8::internal::StepOut; // From StepAction enum 53 using ::v8::internal::StepOut; // From StepAction enum
54 using ::v8::internal::Vector;
52 55
53 56
54 // Size of temp buffer for formatting small strings. 57 // Size of temp buffer for formatting small strings.
55 #define SMALL_STRING_BUFFER_SIZE 80 58 #define SMALL_STRING_BUFFER_SIZE 80
56 59
57 // --- A d d i t i o n a l C h e c k H e l p e r s 60 // --- A d d i t i o n a l C h e c k H e l p e r s
58 61
59 62
60 // Helper function used by the CHECK_EQ function when given Address 63 // Helper function used by the CHECK_EQ function when given Address
61 // arguments. Should not be called directly. 64 // arguments. Should not be called directly.
(...skipping 3306 matching lines...) Expand 10 before | Expand all | Expand 10 after
3368 */ 3371 */
3369 Barriers message_queue_barriers; 3372 Barriers message_queue_barriers;
3370 3373
3371 // This is the debugger thread, that executes no v8 calls except 3374 // This is the debugger thread, that executes no v8 calls except
3372 // placing JSON debugger commands in the queue. 3375 // placing JSON debugger commands in the queue.
3373 class MessageQueueDebuggerThread : public v8::internal::Thread { 3376 class MessageQueueDebuggerThread : public v8::internal::Thread {
3374 public: 3377 public:
3375 void Run(); 3378 void Run();
3376 }; 3379 };
3377 3380
3378 static void MessageHandler(const uint16_t* message, int length, void *data) { 3381 static void MessageHandler(const uint16_t* message, int length,
3382 v8::Debug::ClientData* client_data) {
3379 static char print_buffer[1000]; 3383 static char print_buffer[1000];
3380 Utf16ToAscii(message, length, print_buffer); 3384 Utf16ToAscii(message, length, print_buffer);
3381 if (IsBreakEventMessage(print_buffer)) { 3385 if (IsBreakEventMessage(print_buffer)) {
3382 // Lets test script wait until break occurs to send commands. 3386 // Lets test script wait until break occurs to send commands.
3383 // Signals when a break is reported. 3387 // Signals when a break is reported.
3384 message_queue_barriers.semaphore_2->Signal(); 3388 message_queue_barriers.semaphore_2->Signal();
3385 } 3389 }
3386 // Allow message handler to block on a semaphore, to test queueing of 3390 // Allow message handler to block on a semaphore, to test queueing of
3387 // messages while blocked. 3391 // messages while blocked.
3388 message_queue_barriers.semaphore_1->Wait(); 3392 message_queue_barriers.semaphore_1->Wait();
3389 printf("%s\n", print_buffer); 3393 printf("%s\n", print_buffer);
3390 fflush(stdout); 3394 fflush(stdout);
3391 } 3395 }
3392 3396
3393
3394 void MessageQueueDebuggerThread::Run() { 3397 void MessageQueueDebuggerThread::Run() {
3395 const int kBufferSize = 1000; 3398 const int kBufferSize = 1000;
3396 uint16_t buffer_1[kBufferSize]; 3399 uint16_t buffer_1[kBufferSize];
3397 uint16_t buffer_2[kBufferSize]; 3400 uint16_t buffer_2[kBufferSize];
3398 const char* command_1 = 3401 const char* command_1 =
3399 "{\"seq\":117," 3402 "{\"seq\":117,"
3400 "\"type\":\"request\"," 3403 "\"type\":\"request\","
3401 "\"command\":\"evaluate\"," 3404 "\"command\":\"evaluate\","
3402 "\"arguments\":{\"expression\":\"1+2\"}}"; 3405 "\"arguments\":{\"expression\":\"1+2\"}}";
3403 const char* command_2 = 3406 const char* command_2 =
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
3474 CompileRun(source_1); 3477 CompileRun(source_1);
3475 message_queue_barriers.barrier_1.Wait(); 3478 message_queue_barriers.barrier_1.Wait();
3476 message_queue_barriers.barrier_2.Wait(); 3479 message_queue_barriers.barrier_2.Wait();
3477 CompileRun(source_2); 3480 CompileRun(source_2);
3478 message_queue_barriers.barrier_3.Wait(); 3481 message_queue_barriers.barrier_3.Wait();
3479 CompileRun(source_3); 3482 CompileRun(source_3);
3480 message_queue_debugger_thread.Join(); 3483 message_queue_debugger_thread.Join();
3481 fflush(stdout); 3484 fflush(stdout);
3482 } 3485 }
3483 3486
3487
3488 class TestClientData : public v8::Debug::ClientData {
3489 public:
3490 TestClientData() {
3491 constructor_call_counter++;
3492 }
3493 virtual ~TestClientData() {
3494 destructor_call_counter++;
3495 }
3496
3497 static void ResetCounters() {
3498 constructor_call_counter = 0;
3499 destructor_call_counter = 0;
3500 }
3501
3502 static int constructor_call_counter;
3503 static int destructor_call_counter;
3504 };
3505
3506 int TestClientData::constructor_call_counter = 0;
3507 int TestClientData::destructor_call_counter = 0;
3508
3509
3510 // Tests that MessageQueue doesn't destroy client data when expands and
3511 // does destroy when it dies.
3512 TEST(MessageQueueExpandAndDestroy) {
3513 TestClientData::ResetCounters();
3514 { // Create a scope for the queue.
3515 MessageQueue queue(1);
3516 queue.Put(Message::NewCommand(Vector<uint16_t>::empty(),
3517 new TestClientData()));
3518 queue.Put(Message::NewCommand(Vector<uint16_t>::empty(),
3519 new TestClientData()));
3520 queue.Put(Message::NewHostDispatch(new TestClientData()));
3521 ASSERT_EQ(0, TestClientData::destructor_call_counter);
3522 queue.Get().Dispose();
3523 ASSERT_EQ(1, TestClientData::destructor_call_counter);
3524 queue.Put(Message::NewHostDispatch(new TestClientData()));
3525 queue.Put(Message::NewHostDispatch(new TestClientData()));
3526 queue.Put(Message::NewHostDispatch(new TestClientData()));
3527 queue.Put(Message::NewOutput(v8::Handle<v8::String>(),
3528 new TestClientData()));
3529 queue.Put(Message::NewEmptyMessage());
3530 ASSERT_EQ(1, TestClientData::destructor_call_counter);
3531 queue.Get().Dispose();
3532 ASSERT_EQ(2, TestClientData::destructor_call_counter);
3533 }
3534 // All the client data should be destroyed when the queue is destroyed.
3535 ASSERT_EQ(TestClientData::destructor_call_counter,
3536 TestClientData::destructor_call_counter);
3537 }
3538
3539
3540 static int handled_client_data_instances_count = 0;
3541 static void MessageHandlerCountingClientData(
3542 const uint16_t* message,
3543 int length,
3544 v8::Debug::ClientData* client_data) {
3545 if (client_data) {
3546 handled_client_data_instances_count++;
3547 }
3548 }
3549
3550
3551 // Tests that all client data passed to the debugger are sent to the handler.
3552 TEST(SendClientDataToHandler) {
3553 // Create a V8 environment
3554 v8::HandleScope scope;
3555 DebugLocalContext env;
3556 TestClientData::ResetCounters();
3557 handled_client_data_instances_count = 0;
3558 v8::Debug::SetMessageHandler(MessageHandlerCountingClientData,
3559 false /* message_handler_thread */);
3560 const char* source_1 = "a = 3; b = 4; c = new Object(); c.d = 5; debugger;";
3561 const int kBufferSize = 1000;
3562 uint16_t buffer[kBufferSize];
3563 const char* command_1 =
3564 "{\"seq\":117,"
3565 "\"type\":\"request\","
3566 "\"command\":\"evaluate\","
3567 "\"arguments\":{\"expression\":\"1+2\"}}";
3568 const char* command_2 =
3569 "{\"seq\":118,"
3570 "\"type\":\"request\","
3571 "\"command\":\"evaluate\","
3572 "\"arguments\":{\"expression\":\"1+a\"}}";
3573 const char* command_continue =
3574 "{\"seq\":106,"
3575 "\"type\":\"request\","
3576 "\"command\":\"continue\"}";
3577
3578 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_1, buffer),
3579 new TestClientData());
3580 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_2, buffer), NULL);
3581 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_2, buffer),
3582 new TestClientData());
3583 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_2, buffer),
3584 new TestClientData());
3585 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
3586 CompileRun(source_1);
3587 ASSERT_EQ(3, TestClientData::constructor_call_counter);
3588 ASSERT_EQ(TestClientData::constructor_call_counter,
3589 handled_client_data_instances_count);
3590 ASSERT_EQ(TestClientData::constructor_call_counter,
3591 TestClientData::destructor_call_counter);
3592 }
3593
3594
3484 /* Test ThreadedDebugging */ 3595 /* Test ThreadedDebugging */
3485 /* This test interrupts a running infinite loop that is 3596 /* This test interrupts a running infinite loop that is
3486 * occupying the v8 thread by a break command from the 3597 * occupying the v8 thread by a break command from the
3487 * debugger thread. It then changes the value of a 3598 * debugger thread. It then changes the value of a
3488 * global object, to make the loop terminate. 3599 * global object, to make the loop terminate.
3489 */ 3600 */
3490 3601
3491 Barriers threaded_debugging_barriers; 3602 Barriers threaded_debugging_barriers;
3492 3603
3493 class V8Thread : public v8::internal::Thread { 3604 class V8Thread : public v8::internal::Thread {
3494 public: 3605 public:
3495 void Run(); 3606 void Run();
3496 }; 3607 };
3497 3608
3498 class DebuggerThread : public v8::internal::Thread { 3609 class DebuggerThread : public v8::internal::Thread {
3499 public: 3610 public:
3500 void Run(); 3611 void Run();
3501 }; 3612 };
3502 3613
3503 3614
3504 static v8::Handle<v8::Value> ThreadedAtBarrier1(const v8::Arguments& args) { 3615 static v8::Handle<v8::Value> ThreadedAtBarrier1(const v8::Arguments& args) {
3505 threaded_debugging_barriers.barrier_1.Wait(); 3616 threaded_debugging_barriers.barrier_1.Wait();
3506 return v8::Undefined(); 3617 return v8::Undefined();
3507 } 3618 }
3508 3619
3509 3620
3510 static void ThreadedMessageHandler(const uint16_t* message, int length, 3621 static void ThreadedMessageHandler(const uint16_t* message, int length,
3511 void *data) { 3622 v8::Debug::ClientData* client_data) {
3512 static char print_buffer[1000]; 3623 static char print_buffer[1000];
3513 Utf16ToAscii(message, length, print_buffer); 3624 Utf16ToAscii(message, length, print_buffer);
3514 if (IsBreakEventMessage(print_buffer)) { 3625 if (IsBreakEventMessage(print_buffer)) {
3515 threaded_debugging_barriers.barrier_2.Wait(); 3626 threaded_debugging_barriers.barrier_2.Wait();
3516 } 3627 }
3517 printf("%s\n", print_buffer); 3628 printf("%s\n", print_buffer);
3518 fflush(stdout); 3629 fflush(stdout);
3519 } 3630 }
3520 3631
3521 3632
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
3599 class BreakpointsDebuggerThread : public v8::internal::Thread { 3710 class BreakpointsDebuggerThread : public v8::internal::Thread {
3600 public: 3711 public:
3601 void Run(); 3712 void Run();
3602 }; 3713 };
3603 3714
3604 3715
3605 Barriers* breakpoints_barriers; 3716 Barriers* breakpoints_barriers;
3606 3717
3607 static void BreakpointsMessageHandler(const uint16_t* message, 3718 static void BreakpointsMessageHandler(const uint16_t* message,
3608 int length, 3719 int length,
3609 void *data) { 3720 v8::Debug::ClientData* client_data) {
3610 static char print_buffer[1000]; 3721 static char print_buffer[1000];
3611 Utf16ToAscii(message, length, print_buffer); 3722 Utf16ToAscii(message, length, print_buffer);
3612 printf("%s\n", print_buffer); 3723 printf("%s\n", print_buffer);
3613 fflush(stdout); 3724 fflush(stdout);
3614 3725
3615 // Is break_template a prefix of the message? 3726 // Is break_template a prefix of the message?
3616 if (IsBreakEventMessage(print_buffer)) { 3727 if (IsBreakEventMessage(print_buffer)) {
3617 breakpoints_barriers->semaphore_1->Signal(); 3728 breakpoints_barriers->semaphore_1->Signal();
3618 } 3729 }
3619 } 3730 }
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
3745 v8::Handle<v8::Value> data) { 3856 v8::Handle<v8::Value> data) {
3746 } 3857 }
3747 3858
3748 3859
3749 TEST(SetDebugEventListenerOnUninitializedVM) { 3860 TEST(SetDebugEventListenerOnUninitializedVM) {
3750 v8::Debug::SetDebugEventListener(DummyDebugEventListener); 3861 v8::Debug::SetDebugEventListener(DummyDebugEventListener);
3751 } 3862 }
3752 3863
3753 3864
3754 static void DummyMessageHandler(const uint16_t* message, 3865 static void DummyMessageHandler(const uint16_t* message,
3755 int length, void *data) { 3866 int length,
3867 v8::Debug::ClientData* client_data) {
3756 } 3868 }
3757 3869
3758 3870
3759 TEST(SetMessageHandlerOnUninitializedVM) { 3871 TEST(SetMessageHandlerOnUninitializedVM) {
3760 v8::Debug::SetMessageHandler(DummyMessageHandler); 3872 v8::Debug::SetMessageHandler(DummyMessageHandler);
3761 } 3873 }
3762 3874
3763 3875
3764 TEST(DebugBreakOnUninitializedVM) { 3876 TEST(DebugBreakOnUninitializedVM) {
3765 v8::Debug::DebugBreak(); 3877 v8::Debug::DebugBreak();
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
3971 4083
3972 // Remove the debug event listener without clearing breakpoints again. 4084 // Remove the debug event listener without clearing breakpoints again.
3973 v8::Debug::SetDebugEventListener(NULL); 4085 v8::Debug::SetDebugEventListener(NULL);
3974 CheckDebuggerUnloaded(true); 4086 CheckDebuggerUnloaded(true);
3975 } 4087 }
3976 4088
3977 4089
3978 // Debugger message handler which counts the number of times it is called. 4090 // Debugger message handler which counts the number of times it is called.
3979 static int message_handler_hit_count = 0; 4091 static int message_handler_hit_count = 0;
3980 static void MessageHandlerHitCount(const uint16_t* message, 4092 static void MessageHandlerHitCount(const uint16_t* message,
3981 int length, void* data) { 4093 int length,
4094 v8::Debug::ClientData* client_data) {
3982 message_handler_hit_count++; 4095 message_handler_hit_count++;
3983 4096
3984 const int kBufferSize = 1000; 4097 const int kBufferSize = 1000;
3985 uint16_t buffer[kBufferSize]; 4098 uint16_t buffer[kBufferSize];
3986 const char* command_continue = 4099 const char* command_continue =
3987 "{\"seq\":0," 4100 "{\"seq\":0,"
3988 "\"type\":\"request\"," 4101 "\"type\":\"request\","
3989 "\"command\":\"continue\"}"; 4102 "\"command\":\"continue\"}";
3990 4103
3991 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer)); 4104 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
(...skipping 27 matching lines...) Expand all
4019 CompileRun("throw 1"); 4132 CompileRun("throw 1");
4020 4133
4021 // The message handler should not be called more. 4134 // The message handler should not be called more.
4022 CHECK_EQ(0, message_handler_hit_count); 4135 CHECK_EQ(0, message_handler_hit_count);
4023 4136
4024 CheckDebuggerUnloaded(true); 4137 CheckDebuggerUnloaded(true);
4025 } 4138 }
4026 4139
4027 4140
4028 // Debugger message handler which clears the message handler while active. 4141 // Debugger message handler which clears the message handler while active.
4029 static void MessageHandlerClearingMessageHandler(const uint16_t* message, 4142 static void MessageHandlerClearingMessageHandler(
4030 int length, 4143 const uint16_t* message,
4031 void* data) { 4144 int length,
4145 v8::Debug::ClientData* client_data) {
4032 message_handler_hit_count++; 4146 message_handler_hit_count++;
4033 4147
4034 // Clear debug message handler. 4148 // Clear debug message handler.
4035 v8::Debug::SetMessageHandler(NULL); 4149 v8::Debug::SetMessageHandler(NULL);
4036 } 4150 }
4037 4151
4038 4152
4039 // Test clearing the debug message handler while processing a debug event. 4153 // Test clearing the debug message handler while processing a debug event.
4040 TEST(DebuggerClearMessageHandlerWhileActive) { 4154 TEST(DebuggerClearMessageHandlerWhileActive) {
4041 v8::HandleScope scope; 4155 v8::HandleScope scope;
(...skipping 10 matching lines...) Expand all
4052 CompileRun("throw 1"); 4166 CompileRun("throw 1");
4053 4167
4054 // The message handler should be called. 4168 // The message handler should be called.
4055 CHECK_EQ(1, message_handler_hit_count); 4169 CHECK_EQ(1, message_handler_hit_count);
4056 4170
4057 CheckDebuggerUnloaded(true); 4171 CheckDebuggerUnloaded(true);
4058 } 4172 }
4059 4173
4060 4174
4061 int host_dispatch_hit_count = 0; 4175 int host_dispatch_hit_count = 0;
4062 static void HostDispatchHandlerHitCount(void* dispatch, void *data) { 4176 static void HostDispatchHandlerHitCount(v8::Debug::ClientData* dispatch) {
4063 host_dispatch_hit_count++; 4177 host_dispatch_hit_count++;
4064 } 4178 }
4065 4179
4066 4180
4067 // Test that clearing the debug event listener actually clears all break points 4181 // Test that clearing the debug event listener actually clears all break points
4068 // and related information. 4182 // and related information.
4069 TEST(DebuggerHostDispatch) { 4183 TEST(DebuggerHostDispatch) {
4070 i::FLAG_debugger_auto_break = true; 4184 i::FLAG_debugger_auto_break = true;
4071 4185
4072 v8::HandleScope scope; 4186 v8::HandleScope scope;
4073 DebugLocalContext env; 4187 DebugLocalContext env;
4074 4188
4075 const int kBufferSize = 1000; 4189 const int kBufferSize = 1000;
4076 uint16_t buffer[kBufferSize]; 4190 uint16_t buffer[kBufferSize];
4077 const char* command_continue = 4191 const char* command_continue =
4078 "{\"seq\":0," 4192 "{\"seq\":0,"
4079 "\"type\":\"request\"," 4193 "\"type\":\"request\","
4080 "\"command\":\"continue\"}"; 4194 "\"command\":\"continue\"}";
4081 4195
4082 // Create an empty function to call for processing debug commands 4196 // Create an empty function to call for processing debug commands
4083 v8::Local<v8::Function> empty = 4197 v8::Local<v8::Function> empty =
4084 CompileFunction(&env, "function empty(){}", "empty"); 4198 CompileFunction(&env, "function empty(){}", "empty");
4085 4199
4086 // Setup message and host dispatch handlers. 4200 // Setup message and host dispatch handlers.
4087 v8::Debug::SetMessageHandler(DummyMessageHandler); 4201 v8::Debug::SetMessageHandler(DummyMessageHandler);
4088 v8::Debug::SetHostDispatchHandler(HostDispatchHandlerHitCount, 4202 v8::Debug::SetHostDispatchHandler(HostDispatchHandlerHitCount);
4089 NULL);
4090 4203
4091 // Send a host dispatch by itself. 4204 // Send a host dispatch by itself.
4092 v8::Debug::SendHostDispatch(NULL); 4205 v8::Debug::SendHostDispatch(NULL);
4093 empty->Call(env->Global(), 0, NULL); // Run JavaScript to activate debugger. 4206 empty->Call(env->Global(), 0, NULL); // Run JavaScript to activate debugger.
4094 CHECK_EQ(1, host_dispatch_hit_count); 4207 CHECK_EQ(1, host_dispatch_hit_count);
4095 4208
4096 // Fill a host dispatch and a continue command on the command queue. 4209 // Fill a host dispatch and a continue command on the command queue.
4097 v8::Debug::SendHostDispatch(NULL); 4210 v8::Debug::SendHostDispatch(NULL);
4098 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer)); 4211 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
4099 empty->Call(env->Global(), 0, NULL); // Run JavaScript to activate debugger. 4212 empty->Call(env->Global(), 0, NULL); // Run JavaScript to activate debugger.
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
4351 v8::ScriptOrigin origin2 = v8::ScriptOrigin(v8::String::New("new name")); 4464 v8::ScriptOrigin origin2 = v8::ScriptOrigin(v8::String::New("new name"));
4352 v8::Handle<v8::Script> script2 = v8::Script::Compile(script, &origin2); 4465 v8::Handle<v8::Script> script2 = v8::Script::Compile(script, &origin2);
4353 script2->Run(); 4466 script2->Run();
4354 script2->SetData(data_obj); 4467 script2->SetData(data_obj);
4355 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); 4468 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
4356 f->Call(env->Global(), 0, NULL); 4469 f->Call(env->Global(), 0, NULL);
4357 CHECK_EQ(2, break_point_hit_count); 4470 CHECK_EQ(2, break_point_hit_count);
4358 CHECK_EQ("new name", last_script_name_hit); 4471 CHECK_EQ("new name", last_script_name_hit);
4359 CHECK_EQ("abc 123", last_script_data_hit); 4472 CHECK_EQ("abc 123", last_script_data_hit);
4360 } 4473 }
OLDNEW
« no previous file with comments | « src/debug-agent.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698