OLD | NEW |
---|---|
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 2727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2738 v8::Handle<v8::Value> args[kArgc] = { a }; | 2738 v8::Handle<v8::Value> args[kArgc] = { a }; |
2739 foo->Call(env->Global(), kArgc, args); | 2739 foo->Call(env->Global(), kArgc, args); |
2740 | 2740 |
2741 // Set up break point and step through the function. | 2741 // Set up break point and step through the function. |
2742 SetBreakPoint(foo, 3); | 2742 SetBreakPoint(foo, 3); |
2743 step_action = StepNext; | 2743 step_action = StepNext; |
2744 break_point_hit_count = 0; | 2744 break_point_hit_count = 0; |
2745 foo->Call(env->Global(), kArgc, args); | 2745 foo->Call(env->Global(), kArgc, args); |
2746 | 2746 |
2747 // With stepping all break locations are hit. | 2747 // With stepping all break locations are hit. |
2748 CHECK_EQ(33, break_point_hit_count); | 2748 CHECK_EQ(34, break_point_hit_count); |
Yang
2012/03/07 18:28:36
We have exactly one debug break more whenever a fo
| |
2749 | 2749 |
2750 v8::Debug::SetDebugEventListener(NULL); | 2750 v8::Debug::SetDebugEventListener(NULL); |
2751 CheckDebuggerUnloaded(); | 2751 CheckDebuggerUnloaded(); |
2752 } | 2752 } |
2753 | 2753 |
2754 | 2754 |
2755 // Test of the stepping mechanism for keyed store in a loop. | 2755 // Test of the stepping mechanism for keyed store in a loop. |
2756 TEST(DebugStepKeyedStoreLoop) { | 2756 TEST(DebugStepKeyedStoreLoop) { |
2757 v8::HandleScope scope; | 2757 v8::HandleScope scope; |
2758 DebugLocalContext env; | 2758 DebugLocalContext env; |
(...skipping 26 matching lines...) Expand all Loading... | |
2785 v8::Handle<v8::Value> args[kArgc] = { a }; | 2785 v8::Handle<v8::Value> args[kArgc] = { a }; |
2786 foo->Call(env->Global(), kArgc, args); | 2786 foo->Call(env->Global(), kArgc, args); |
2787 | 2787 |
2788 // Set up break point and step through the function. | 2788 // Set up break point and step through the function. |
2789 SetBreakPoint(foo, 3); | 2789 SetBreakPoint(foo, 3); |
2790 step_action = StepNext; | 2790 step_action = StepNext; |
2791 break_point_hit_count = 0; | 2791 break_point_hit_count = 0; |
2792 foo->Call(env->Global(), kArgc, args); | 2792 foo->Call(env->Global(), kArgc, args); |
2793 | 2793 |
2794 // With stepping all break locations are hit. | 2794 // With stepping all break locations are hit. |
2795 CHECK_EQ(32, break_point_hit_count); | 2795 CHECK_EQ(33, break_point_hit_count); |
2796 | 2796 |
2797 v8::Debug::SetDebugEventListener(NULL); | 2797 v8::Debug::SetDebugEventListener(NULL); |
2798 CheckDebuggerUnloaded(); | 2798 CheckDebuggerUnloaded(); |
2799 } | 2799 } |
2800 | 2800 |
2801 | 2801 |
2802 // Test of the stepping mechanism for named load in a loop. | 2802 // Test of the stepping mechanism for named load in a loop. |
2803 TEST(DebugStepNamedLoadLoop) { | 2803 TEST(DebugStepNamedLoadLoop) { |
2804 v8::HandleScope scope; | 2804 v8::HandleScope scope; |
2805 DebugLocalContext env; | 2805 DebugLocalContext env; |
(...skipping 23 matching lines...) Expand all Loading... | |
2829 // Call function without any break points to ensure inlining is in place. | 2829 // Call function without any break points to ensure inlining is in place. |
2830 foo->Call(env->Global(), 0, NULL); | 2830 foo->Call(env->Global(), 0, NULL); |
2831 | 2831 |
2832 // Set up break point and step through the function. | 2832 // Set up break point and step through the function. |
2833 SetBreakPoint(foo, 4); | 2833 SetBreakPoint(foo, 4); |
2834 step_action = StepNext; | 2834 step_action = StepNext; |
2835 break_point_hit_count = 0; | 2835 break_point_hit_count = 0; |
2836 foo->Call(env->Global(), 0, NULL); | 2836 foo->Call(env->Global(), 0, NULL); |
2837 | 2837 |
2838 // With stepping all break locations are hit. | 2838 // With stepping all break locations are hit. |
2839 CHECK_EQ(53, break_point_hit_count); | 2839 CHECK_EQ(54, break_point_hit_count); |
2840 | 2840 |
2841 v8::Debug::SetDebugEventListener(NULL); | 2841 v8::Debug::SetDebugEventListener(NULL); |
2842 CheckDebuggerUnloaded(); | 2842 CheckDebuggerUnloaded(); |
2843 } | 2843 } |
2844 | 2844 |
2845 | 2845 |
2846 static void DoDebugStepNamedStoreLoop(int expected) { | 2846 static void DoDebugStepNamedStoreLoop(int expected) { |
2847 v8::HandleScope scope; | 2847 v8::HandleScope scope; |
2848 DebugLocalContext env; | 2848 DebugLocalContext env; |
2849 | 2849 |
(...skipping 23 matching lines...) Expand all Loading... | |
2873 // With stepping all expected break locations are hit. | 2873 // With stepping all expected break locations are hit. |
2874 CHECK_EQ(expected, break_point_hit_count); | 2874 CHECK_EQ(expected, break_point_hit_count); |
2875 | 2875 |
2876 v8::Debug::SetDebugEventListener(NULL); | 2876 v8::Debug::SetDebugEventListener(NULL); |
2877 CheckDebuggerUnloaded(); | 2877 CheckDebuggerUnloaded(); |
2878 } | 2878 } |
2879 | 2879 |
2880 | 2880 |
2881 // Test of the stepping mechanism for named load in a loop. | 2881 // Test of the stepping mechanism for named load in a loop. |
2882 TEST(DebugStepNamedStoreLoop) { | 2882 TEST(DebugStepNamedStoreLoop) { |
2883 DoDebugStepNamedStoreLoop(22); | 2883 DoDebugStepNamedStoreLoop(23); |
2884 } | 2884 } |
2885 | 2885 |
2886 | 2886 |
2887 // Test the stepping mechanism with different ICs. | 2887 // Test the stepping mechanism with different ICs. |
2888 TEST(DebugStepLinearMixedICs) { | 2888 TEST(DebugStepLinearMixedICs) { |
2889 v8::HandleScope scope; | 2889 v8::HandleScope scope; |
2890 DebugLocalContext env; | 2890 DebugLocalContext env; |
2891 | 2891 |
2892 // Register a debug event listener which steps and counts. | 2892 // Register a debug event listener which steps and counts. |
2893 v8::Debug::SetDebugEventListener(DebugEventStep); | 2893 v8::Debug::SetDebugEventListener(DebugEventStep); |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3245 SetBreakPoint(foo, 8); // "var a = 0;" | 3245 SetBreakPoint(foo, 8); // "var a = 0;" |
3246 | 3246 |
3247 // Each loop generates 4 or 5 steps depending on whether a is equal. | 3247 // Each loop generates 4 or 5 steps depending on whether a is equal. |
3248 | 3248 |
3249 // Looping 10 times. | 3249 // Looping 10 times. |
3250 step_action = StepIn; | 3250 step_action = StepIn; |
3251 break_point_hit_count = 0; | 3251 break_point_hit_count = 0; |
3252 v8::Handle<v8::Value> argv_10[argc] = { v8::Number::New(10) }; | 3252 v8::Handle<v8::Value> argv_10[argc] = { v8::Number::New(10) }; |
3253 result = foo->Call(env->Global(), argc, argv_10); | 3253 result = foo->Call(env->Global(), argc, argv_10); |
3254 CHECK_EQ(5, result->Int32Value()); | 3254 CHECK_EQ(5, result->Int32Value()); |
3255 CHECK_EQ(50, break_point_hit_count); | 3255 CHECK_EQ(51, break_point_hit_count); |
3256 | 3256 |
3257 // Looping 100 times. | 3257 // Looping 100 times. |
3258 step_action = StepIn; | 3258 step_action = StepIn; |
3259 break_point_hit_count = 0; | 3259 break_point_hit_count = 0; |
3260 v8::Handle<v8::Value> argv_100[argc] = { v8::Number::New(100) }; | 3260 v8::Handle<v8::Value> argv_100[argc] = { v8::Number::New(100) }; |
3261 result = foo->Call(env->Global(), argc, argv_100); | 3261 result = foo->Call(env->Global(), argc, argv_100); |
3262 CHECK_EQ(50, result->Int32Value()); | 3262 CHECK_EQ(50, result->Int32Value()); |
3263 CHECK_EQ(455, break_point_hit_count); | 3263 CHECK_EQ(456, break_point_hit_count); |
3264 | 3264 |
3265 // Get rid of the debug event listener. | 3265 // Get rid of the debug event listener. |
3266 v8::Debug::SetDebugEventListener(NULL); | 3266 v8::Debug::SetDebugEventListener(NULL); |
3267 CheckDebuggerUnloaded(); | 3267 CheckDebuggerUnloaded(); |
3268 } | 3268 } |
3269 | 3269 |
3270 | 3270 |
3271 TEST(DebugStepForBreak) { | 3271 TEST(DebugStepForBreak) { |
3272 v8::HandleScope scope; | 3272 v8::HandleScope scope; |
3273 DebugLocalContext env; | 3273 DebugLocalContext env; |
(...skipping 23 matching lines...) Expand all Loading... | |
3297 | 3297 |
3298 // Each loop generates 5 steps except for the last (when break is executed) | 3298 // Each loop generates 5 steps except for the last (when break is executed) |
3299 // which only generates 4. | 3299 // which only generates 4. |
3300 | 3300 |
3301 // Looping 10 times. | 3301 // Looping 10 times. |
3302 step_action = StepIn; | 3302 step_action = StepIn; |
3303 break_point_hit_count = 0; | 3303 break_point_hit_count = 0; |
3304 v8::Handle<v8::Value> argv_10[argc] = { v8::Number::New(10) }; | 3304 v8::Handle<v8::Value> argv_10[argc] = { v8::Number::New(10) }; |
3305 result = foo->Call(env->Global(), argc, argv_10); | 3305 result = foo->Call(env->Global(), argc, argv_10); |
3306 CHECK_EQ(9, result->Int32Value()); | 3306 CHECK_EQ(9, result->Int32Value()); |
3307 CHECK_EQ(53, break_point_hit_count); | 3307 CHECK_EQ(54, break_point_hit_count); |
3308 | 3308 |
3309 // Looping 100 times. | 3309 // Looping 100 times. |
3310 step_action = StepIn; | 3310 step_action = StepIn; |
3311 break_point_hit_count = 0; | 3311 break_point_hit_count = 0; |
3312 v8::Handle<v8::Value> argv_100[argc] = { v8::Number::New(100) }; | 3312 v8::Handle<v8::Value> argv_100[argc] = { v8::Number::New(100) }; |
3313 result = foo->Call(env->Global(), argc, argv_100); | 3313 result = foo->Call(env->Global(), argc, argv_100); |
3314 CHECK_EQ(99, result->Int32Value()); | 3314 CHECK_EQ(99, result->Int32Value()); |
3315 CHECK_EQ(503, break_point_hit_count); | 3315 CHECK_EQ(504, break_point_hit_count); |
3316 | 3316 |
3317 // Get rid of the debug event listener. | 3317 // Get rid of the debug event listener. |
3318 v8::Debug::SetDebugEventListener(NULL); | 3318 v8::Debug::SetDebugEventListener(NULL); |
3319 CheckDebuggerUnloaded(); | 3319 CheckDebuggerUnloaded(); |
3320 } | 3320 } |
3321 | 3321 |
3322 | 3322 |
3323 TEST(DebugStepForIn) { | 3323 TEST(DebugStepForIn) { |
3324 v8::HandleScope scope; | 3324 v8::HandleScope scope; |
3325 DebugLocalContext env; | 3325 DebugLocalContext env; |
(...skipping 4015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7341 "g(false); \n" | 7341 "g(false); \n" |
7342 "%OptimizeFunctionOnNextCall(g); \n" | 7342 "%OptimizeFunctionOnNextCall(g); \n" |
7343 "g(true);"; | 7343 "g(true);"; |
7344 v8::Debug::SetDebugEventListener(DebugBreakInlineListener); | 7344 v8::Debug::SetDebugEventListener(DebugBreakInlineListener); |
7345 inline_script = v8::Script::Compile(v8::String::New(source)); | 7345 inline_script = v8::Script::Compile(v8::String::New(source)); |
7346 inline_script->Run(); | 7346 inline_script->Run(); |
7347 } | 7347 } |
7348 | 7348 |
7349 | 7349 |
7350 #endif // ENABLE_DEBUGGER_SUPPORT | 7350 #endif // ENABLE_DEBUGGER_SUPPORT |
OLD | NEW |