OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 2725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2736 v8::Local<v8::Array> a = v8::Array::New(10); | 2736 v8::Local<v8::Array> a = v8::Array::New(10); |
2737 for (int i = 0; i < 10; i++) { | 2737 for (int i = 0; i < 10; i++) { |
2738 a->Set(v8::Number::New(i), v8::Number::New(i)); | 2738 a->Set(v8::Number::New(i), v8::Number::New(i)); |
2739 } | 2739 } |
2740 | 2740 |
2741 // Call function without any break points to ensure inlining is in place. | 2741 // Call function without any break points to ensure inlining is in place. |
2742 const int kArgc = 1; | 2742 const int kArgc = 1; |
2743 v8::Handle<v8::Value> args[kArgc] = { a }; | 2743 v8::Handle<v8::Value> args[kArgc] = { a }; |
2744 foo->Call(env->Global(), kArgc, args); | 2744 foo->Call(env->Global(), kArgc, args); |
2745 | 2745 |
2746 // Setup break point and step through the function. | 2746 // Set up break point and step through the function. |
2747 SetBreakPoint(foo, 3); | 2747 SetBreakPoint(foo, 3); |
2748 step_action = StepNext; | 2748 step_action = StepNext; |
2749 break_point_hit_count = 0; | 2749 break_point_hit_count = 0; |
2750 foo->Call(env->Global(), kArgc, args); | 2750 foo->Call(env->Global(), kArgc, args); |
2751 | 2751 |
2752 // With stepping all break locations are hit. | 2752 // With stepping all break locations are hit. |
2753 CHECK_EQ(33, break_point_hit_count); | 2753 CHECK_EQ(33, break_point_hit_count); |
2754 | 2754 |
2755 v8::Debug::SetDebugEventListener(NULL); | 2755 v8::Debug::SetDebugEventListener(NULL); |
2756 CheckDebuggerUnloaded(); | 2756 CheckDebuggerUnloaded(); |
(...skipping 26 matching lines...) Expand all Loading... |
2783 v8::Local<v8::Array> a = v8::Array::New(10); | 2783 v8::Local<v8::Array> a = v8::Array::New(10); |
2784 for (int i = 0; i < 10; i++) { | 2784 for (int i = 0; i < 10; i++) { |
2785 a->Set(v8::Number::New(i), v8::Number::New(i)); | 2785 a->Set(v8::Number::New(i), v8::Number::New(i)); |
2786 } | 2786 } |
2787 | 2787 |
2788 // Call function without any break points to ensure inlining is in place. | 2788 // Call function without any break points to ensure inlining is in place. |
2789 const int kArgc = 1; | 2789 const int kArgc = 1; |
2790 v8::Handle<v8::Value> args[kArgc] = { a }; | 2790 v8::Handle<v8::Value> args[kArgc] = { a }; |
2791 foo->Call(env->Global(), kArgc, args); | 2791 foo->Call(env->Global(), kArgc, args); |
2792 | 2792 |
2793 // Setup break point and step through the function. | 2793 // Set up break point and step through the function. |
2794 SetBreakPoint(foo, 3); | 2794 SetBreakPoint(foo, 3); |
2795 step_action = StepNext; | 2795 step_action = StepNext; |
2796 break_point_hit_count = 0; | 2796 break_point_hit_count = 0; |
2797 foo->Call(env->Global(), kArgc, args); | 2797 foo->Call(env->Global(), kArgc, args); |
2798 | 2798 |
2799 // With stepping all break locations are hit. | 2799 // With stepping all break locations are hit. |
2800 CHECK_EQ(32, break_point_hit_count); | 2800 CHECK_EQ(32, break_point_hit_count); |
2801 | 2801 |
2802 v8::Debug::SetDebugEventListener(NULL); | 2802 v8::Debug::SetDebugEventListener(NULL); |
2803 CheckDebuggerUnloaded(); | 2803 CheckDebuggerUnloaded(); |
(...skipping 23 matching lines...) Expand all Loading... |
2827 "}\n" | 2827 "}\n" |
2828 "function V(x, y) {\n" | 2828 "function V(x, y) {\n" |
2829 " this.x = x;\n" | 2829 " this.x = x;\n" |
2830 " this.y = y;\n" | 2830 " this.y = y;\n" |
2831 "}\n", | 2831 "}\n", |
2832 "foo"); | 2832 "foo"); |
2833 | 2833 |
2834 // Call function without any break points to ensure inlining is in place. | 2834 // Call function without any break points to ensure inlining is in place. |
2835 foo->Call(env->Global(), 0, NULL); | 2835 foo->Call(env->Global(), 0, NULL); |
2836 | 2836 |
2837 // Setup break point and step through the function. | 2837 // Set up break point and step through the function. |
2838 SetBreakPoint(foo, 4); | 2838 SetBreakPoint(foo, 4); |
2839 step_action = StepNext; | 2839 step_action = StepNext; |
2840 break_point_hit_count = 0; | 2840 break_point_hit_count = 0; |
2841 foo->Call(env->Global(), 0, NULL); | 2841 foo->Call(env->Global(), 0, NULL); |
2842 | 2842 |
2843 // With stepping all break locations are hit. | 2843 // With stepping all break locations are hit. |
2844 CHECK_EQ(53, break_point_hit_count); | 2844 CHECK_EQ(53, break_point_hit_count); |
2845 | 2845 |
2846 v8::Debug::SetDebugEventListener(NULL); | 2846 v8::Debug::SetDebugEventListener(NULL); |
2847 CheckDebuggerUnloaded(); | 2847 CheckDebuggerUnloaded(); |
(...skipping 14 matching lines...) Expand all Loading... |
2862 " var a = {a:1};\n" | 2862 " var a = {a:1};\n" |
2863 " for (var i = 0; i < 10; i++) {\n" | 2863 " for (var i = 0; i < 10; i++) {\n" |
2864 " a.a = 2\n" | 2864 " a.a = 2\n" |
2865 " }\n" | 2865 " }\n" |
2866 "}\n", | 2866 "}\n", |
2867 "foo"); | 2867 "foo"); |
2868 | 2868 |
2869 // Call function without any break points to ensure inlining is in place. | 2869 // Call function without any break points to ensure inlining is in place. |
2870 foo->Call(env->Global(), 0, NULL); | 2870 foo->Call(env->Global(), 0, NULL); |
2871 | 2871 |
2872 // Setup break point and step through the function. | 2872 // Set up break point and step through the function. |
2873 SetBreakPoint(foo, 3); | 2873 SetBreakPoint(foo, 3); |
2874 step_action = StepNext; | 2874 step_action = StepNext; |
2875 break_point_hit_count = 0; | 2875 break_point_hit_count = 0; |
2876 foo->Call(env->Global(), 0, NULL); | 2876 foo->Call(env->Global(), 0, NULL); |
2877 | 2877 |
2878 // With stepping all expected break locations are hit. | 2878 // With stepping all expected break locations are hit. |
2879 CHECK_EQ(expected, break_point_hit_count); | 2879 CHECK_EQ(expected, break_point_hit_count); |
2880 | 2880 |
2881 v8::Debug::SetDebugEventListener(NULL); | 2881 v8::Debug::SetDebugEventListener(NULL); |
2882 CheckDebuggerUnloaded(); | 2882 CheckDebuggerUnloaded(); |
(...skipping 2819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5702 " y_global = 5;\n" | 5702 " y_global = 5;\n" |
5703 " return x;\n" | 5703 " return x;\n" |
5704 "}\n" | 5704 "}\n" |
5705 "\n"; | 5705 "\n"; |
5706 const char* source_2 = "cat(17);\n"; | 5706 const char* source_2 = "cat(17);\n"; |
5707 | 5707 |
5708 v8::V8::Initialize(); | 5708 v8::V8::Initialize(); |
5709 v8::HandleScope scope; | 5709 v8::HandleScope scope; |
5710 DebugLocalContext env; | 5710 DebugLocalContext env; |
5711 | 5711 |
5712 // Setup message and host dispatch handlers. | 5712 // Set up message and host dispatch handlers. |
5713 v8::Debug::SetMessageHandler2(HostDispatchMessageHandler); | 5713 v8::Debug::SetMessageHandler2(HostDispatchMessageHandler); |
5714 v8::Debug::SetHostDispatchHandler(HostDispatchDispatchHandler, 10 /* ms */); | 5714 v8::Debug::SetHostDispatchHandler(HostDispatchDispatchHandler, 10 /* ms */); |
5715 | 5715 |
5716 CompileRun(source_1); | 5716 CompileRun(source_1); |
5717 host_dispatch_barriers->barrier_1.Wait(); | 5717 host_dispatch_barriers->barrier_1.Wait(); |
5718 host_dispatch_barriers->barrier_2.Wait(); | 5718 host_dispatch_barriers->barrier_2.Wait(); |
5719 CompileRun(source_2); | 5719 CompileRun(source_2); |
5720 } | 5720 } |
5721 | 5721 |
5722 | 5722 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5790 static void DebugMessageHandler() { | 5790 static void DebugMessageHandler() { |
5791 debug_message_dispatch_barriers->semaphore_1->Signal(); | 5791 debug_message_dispatch_barriers->semaphore_1->Signal(); |
5792 } | 5792 } |
5793 | 5793 |
5794 | 5794 |
5795 void DebugMessageDispatchV8Thread::Run() { | 5795 void DebugMessageDispatchV8Thread::Run() { |
5796 v8::V8::Initialize(); | 5796 v8::V8::Initialize(); |
5797 v8::HandleScope scope; | 5797 v8::HandleScope scope; |
5798 DebugLocalContext env; | 5798 DebugLocalContext env; |
5799 | 5799 |
5800 // Setup debug message dispatch handler. | 5800 // Set up debug message dispatch handler. |
5801 v8::Debug::SetDebugMessageDispatchHandler(DebugMessageHandler); | 5801 v8::Debug::SetDebugMessageDispatchHandler(DebugMessageHandler); |
5802 | 5802 |
5803 CompileRun("var y = 1 + 2;\n"); | 5803 CompileRun("var y = 1 + 2;\n"); |
5804 debug_message_dispatch_barriers->barrier_1.Wait(); | 5804 debug_message_dispatch_barriers->barrier_1.Wait(); |
5805 debug_message_dispatch_barriers->semaphore_1->Wait(); | 5805 debug_message_dispatch_barriers->semaphore_1->Wait(); |
5806 debug_message_dispatch_barriers->barrier_2.Wait(); | 5806 debug_message_dispatch_barriers->barrier_2.Wait(); |
5807 } | 5807 } |
5808 | 5808 |
5809 | 5809 |
5810 void DebugMessageDispatchDebuggerThread::Run() { | 5810 void DebugMessageDispatchDebuggerThread::Run() { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5844 const int kPort3 = 5856; | 5844 const int kPort3 = 5856; |
5845 | 5845 |
5846 // Make a string with the port2 number. | 5846 // Make a string with the port2 number. |
5847 const int kPortBufferLen = 6; | 5847 const int kPortBufferLen = 6; |
5848 char port2_str[kPortBufferLen]; | 5848 char port2_str[kPortBufferLen]; |
5849 OS::SNPrintF(i::Vector<char>(port2_str, kPortBufferLen), "%d", kPort2); | 5849 OS::SNPrintF(i::Vector<char>(port2_str, kPortBufferLen), "%d", kPort2); |
5850 | 5850 |
5851 bool ok; | 5851 bool ok; |
5852 | 5852 |
5853 // Initialize the socket library. | 5853 // Initialize the socket library. |
5854 i::Socket::Setup(); | 5854 i::Socket::SetUp(); |
5855 | 5855 |
5856 // Test starting and stopping the agent without any client connection. | 5856 // Test starting and stopping the agent without any client connection. |
5857 debugger->StartAgent("test", kPort1); | 5857 debugger->StartAgent("test", kPort1); |
5858 debugger->StopAgent(); | 5858 debugger->StopAgent(); |
5859 // Test starting the agent, connecting a client and shutting down the agent | 5859 // Test starting the agent, connecting a client and shutting down the agent |
5860 // with the client connected. | 5860 // with the client connected. |
5861 ok = debugger->StartAgent("test", kPort2); | 5861 ok = debugger->StartAgent("test", kPort2); |
5862 CHECK(ok); | 5862 CHECK(ok); |
5863 debugger->WaitForAgent(); | 5863 debugger->WaitForAgent(); |
5864 i::Socket* client = i::OS::CreateSocket(); | 5864 i::Socket* client = i::OS::CreateSocket(); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5942 // parallel. | 5942 // parallel. |
5943 const int kPort = 5860; | 5943 const int kPort = 5860; |
5944 static const char* kLocalhost = "localhost"; | 5944 static const char* kLocalhost = "localhost"; |
5945 | 5945 |
5946 // Make a string with the port number. | 5946 // Make a string with the port number. |
5947 const int kPortBufferLen = 6; | 5947 const int kPortBufferLen = 6; |
5948 char port_str[kPortBufferLen]; | 5948 char port_str[kPortBufferLen]; |
5949 OS::SNPrintF(i::Vector<char>(port_str, kPortBufferLen), "%d", kPort); | 5949 OS::SNPrintF(i::Vector<char>(port_str, kPortBufferLen), "%d", kPort); |
5950 | 5950 |
5951 // Initialize the socket library. | 5951 // Initialize the socket library. |
5952 i::Socket::Setup(); | 5952 i::Socket::SetUp(); |
5953 | 5953 |
5954 // Create a socket server to receive a debugger agent message. | 5954 // Create a socket server to receive a debugger agent message. |
5955 DebuggerAgentProtocolServerThread* server = | 5955 DebuggerAgentProtocolServerThread* server = |
5956 new DebuggerAgentProtocolServerThread(kPort); | 5956 new DebuggerAgentProtocolServerThread(kPort); |
5957 server->Start(); | 5957 server->Start(); |
5958 server->WaitForListening(); | 5958 server->WaitForListening(); |
5959 | 5959 |
5960 // Connect. | 5960 // Connect. |
5961 i::Socket* client = i::OS::CreateSocket(); | 5961 i::Socket* client = i::OS::CreateSocket(); |
5962 CHECK(client != NULL); | 5962 CHECK(client != NULL); |
(...skipping 1323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7286 TestDebugBreakInLoop("for (;;) {", loop_bodies, "}"); | 7286 TestDebugBreakInLoop("for (;;) {", loop_bodies, "}"); |
7287 TestDebugBreakInLoop("for (;a == 1;) {", loop_bodies, "}"); | 7287 TestDebugBreakInLoop("for (;a == 1;) {", loop_bodies, "}"); |
7288 | 7288 |
7289 // Get rid of the debug event listener. | 7289 // Get rid of the debug event listener. |
7290 v8::Debug::SetDebugEventListener(NULL); | 7290 v8::Debug::SetDebugEventListener(NULL); |
7291 CheckDebuggerUnloaded(); | 7291 CheckDebuggerUnloaded(); |
7292 } | 7292 } |
7293 | 7293 |
7294 | 7294 |
7295 #endif // ENABLE_DEBUGGER_SUPPORT | 7295 #endif // ENABLE_DEBUGGER_SUPPORT |
OLD | NEW |