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

Side by Side Diff: src/runtime/runtime-debug.cc

Issue 1181013007: Debugger: require debugger to be active when dealing with breaks. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix yet another test Created 5 years, 6 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
« no previous file with comments | « src/debug.cc ('k') | test/cctest/cctest.h » ('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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/arguments.h" 8 #include "src/arguments.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/debug.h" 10 #include "src/debug.h"
(...skipping 2165 matching lines...) Expand 10 before | Expand all | Expand 10 after
2176 2176
2177 2177
2178 static bool IsPositionAlignmentCodeCorrect(int alignment) { 2178 static bool IsPositionAlignmentCodeCorrect(int alignment) {
2179 return alignment == STATEMENT_ALIGNED || alignment == BREAK_POSITION_ALIGNED; 2179 return alignment == STATEMENT_ALIGNED || alignment == BREAK_POSITION_ALIGNED;
2180 } 2180 }
2181 2181
2182 2182
2183 RUNTIME_FUNCTION(Runtime_GetBreakLocations) { 2183 RUNTIME_FUNCTION(Runtime_GetBreakLocations) {
2184 HandleScope scope(isolate); 2184 HandleScope scope(isolate);
2185 DCHECK(args.length() == 2); 2185 DCHECK(args.length() == 2);
2186 2186 RUNTIME_ASSERT(isolate->debug()->is_active());
2187 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); 2187 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0);
2188 CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[1]); 2188 CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[1]);
2189 2189
2190 if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) { 2190 if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) {
2191 return isolate->ThrowIllegalOperation(); 2191 return isolate->ThrowIllegalOperation();
2192 } 2192 }
2193 BreakPositionAlignment alignment = 2193 BreakPositionAlignment alignment =
2194 static_cast<BreakPositionAlignment>(statement_aligned_code); 2194 static_cast<BreakPositionAlignment>(statement_aligned_code);
2195 2195
2196 Handle<SharedFunctionInfo> shared(fun->shared()); 2196 Handle<SharedFunctionInfo> shared(fun->shared());
2197 // Find the number of break points 2197 // Find the number of break points
2198 Handle<Object> break_locations = 2198 Handle<Object> break_locations =
2199 Debug::GetSourceBreakLocations(shared, alignment); 2199 Debug::GetSourceBreakLocations(shared, alignment);
2200 if (break_locations->IsUndefined()) return isolate->heap()->undefined_value(); 2200 if (break_locations->IsUndefined()) return isolate->heap()->undefined_value();
2201 // Return array as JS array 2201 // Return array as JS array
2202 return *isolate->factory()->NewJSArrayWithElements( 2202 return *isolate->factory()->NewJSArrayWithElements(
2203 Handle<FixedArray>::cast(break_locations)); 2203 Handle<FixedArray>::cast(break_locations));
2204 } 2204 }
2205 2205
2206 2206
2207 // Set a break point in a function. 2207 // Set a break point in a function.
2208 // args[0]: function 2208 // args[0]: function
2209 // args[1]: number: break source position (within the function source) 2209 // args[1]: number: break source position (within the function source)
2210 // args[2]: number: break point object 2210 // args[2]: number: break point object
2211 RUNTIME_FUNCTION(Runtime_SetFunctionBreakPoint) { 2211 RUNTIME_FUNCTION(Runtime_SetFunctionBreakPoint) {
2212 HandleScope scope(isolate); 2212 HandleScope scope(isolate);
2213 DCHECK(args.length() == 3); 2213 DCHECK(args.length() == 3);
2214 RUNTIME_ASSERT(isolate->debug()->is_active());
2214 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); 2215 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
2215 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]); 2216 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]);
2216 RUNTIME_ASSERT(source_position >= function->shared()->start_position() && 2217 RUNTIME_ASSERT(source_position >= function->shared()->start_position() &&
2217 source_position <= function->shared()->end_position()); 2218 source_position <= function->shared()->end_position());
2218 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 2); 2219 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 2);
2219 2220
2220 // Set break point. 2221 // Set break point.
2221 RUNTIME_ASSERT(isolate->debug()->SetBreakPoint( 2222 RUNTIME_ASSERT(isolate->debug()->SetBreakPoint(
2222 function, break_point_object_arg, &source_position)); 2223 function, break_point_object_arg, &source_position));
2223 2224
2224 return Smi::FromInt(source_position); 2225 return Smi::FromInt(source_position);
2225 } 2226 }
2226 2227
2227 2228
2228 // Changes the state of a break point in a script and returns source position 2229 // Changes the state of a break point in a script and returns source position
2229 // where break point was set. NOTE: Regarding performance see the NOTE for 2230 // where break point was set. NOTE: Regarding performance see the NOTE for
2230 // GetScriptFromScriptData. 2231 // GetScriptFromScriptData.
2231 // args[0]: script to set break point in 2232 // args[0]: script to set break point in
2232 // args[1]: number: break source position (within the script source) 2233 // args[1]: number: break source position (within the script source)
2233 // args[2]: number, breakpoint position alignment 2234 // args[2]: number, breakpoint position alignment
2234 // args[3]: number: break point object 2235 // args[3]: number: break point object
2235 RUNTIME_FUNCTION(Runtime_SetScriptBreakPoint) { 2236 RUNTIME_FUNCTION(Runtime_SetScriptBreakPoint) {
2236 HandleScope scope(isolate); 2237 HandleScope scope(isolate);
2237 DCHECK(args.length() == 4); 2238 DCHECK(args.length() == 4);
2239 RUNTIME_ASSERT(isolate->debug()->is_active());
2238 CONVERT_ARG_HANDLE_CHECKED(JSValue, wrapper, 0); 2240 CONVERT_ARG_HANDLE_CHECKED(JSValue, wrapper, 0);
2239 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]); 2241 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]);
2240 RUNTIME_ASSERT(source_position >= 0); 2242 RUNTIME_ASSERT(source_position >= 0);
2241 CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[2]); 2243 CONVERT_NUMBER_CHECKED(int32_t, statement_aligned_code, Int32, args[2]);
2242 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 3); 2244 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 3);
2243 2245
2244 if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) { 2246 if (!IsPositionAlignmentCodeCorrect(statement_aligned_code)) {
2245 return isolate->ThrowIllegalOperation(); 2247 return isolate->ThrowIllegalOperation();
2246 } 2248 }
2247 BreakPositionAlignment alignment = 2249 BreakPositionAlignment alignment =
(...skipping 11 matching lines...) Expand all
2259 2261
2260 return Smi::FromInt(source_position); 2262 return Smi::FromInt(source_position);
2261 } 2263 }
2262 2264
2263 2265
2264 // Clear a break point 2266 // Clear a break point
2265 // args[0]: number: break point object 2267 // args[0]: number: break point object
2266 RUNTIME_FUNCTION(Runtime_ClearBreakPoint) { 2268 RUNTIME_FUNCTION(Runtime_ClearBreakPoint) {
2267 HandleScope scope(isolate); 2269 HandleScope scope(isolate);
2268 DCHECK(args.length() == 1); 2270 DCHECK(args.length() == 1);
2271 RUNTIME_ASSERT(isolate->debug()->is_active());
2269 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 0); 2272 CONVERT_ARG_HANDLE_CHECKED(Object, break_point_object_arg, 0);
2270 2273
2271 // Clear break point. 2274 // Clear break point.
2272 isolate->debug()->ClearBreakPoint(break_point_object_arg); 2275 isolate->debug()->ClearBreakPoint(break_point_object_arg);
2273 2276
2274 return isolate->heap()->undefined_value(); 2277 return isolate->heap()->undefined_value();
2275 } 2278 }
2276 2279
2277 2280
2278 // Change the state of break on exceptions. 2281 // Change the state of break on exceptions.
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2356 isolate->debug()->PrepareStep(static_cast<StepAction>(step_action), 2359 isolate->debug()->PrepareStep(static_cast<StepAction>(step_action),
2357 step_count, frame_id); 2360 step_count, frame_id);
2358 return isolate->heap()->undefined_value(); 2361 return isolate->heap()->undefined_value();
2359 } 2362 }
2360 2363
2361 2364
2362 // Clear all stepping set by PrepareStep. 2365 // Clear all stepping set by PrepareStep.
2363 RUNTIME_FUNCTION(Runtime_ClearStepping) { 2366 RUNTIME_FUNCTION(Runtime_ClearStepping) {
2364 HandleScope scope(isolate); 2367 HandleScope scope(isolate);
2365 DCHECK(args.length() == 0); 2368 DCHECK(args.length() == 0);
2369 RUNTIME_ASSERT(isolate->debug()->is_active());
2366 isolate->debug()->ClearStepping(); 2370 isolate->debug()->ClearStepping();
2367 return isolate->heap()->undefined_value(); 2371 return isolate->heap()->undefined_value();
2368 } 2372 }
2369 2373
2370 2374
2371 // Helper function to find or create the arguments object for 2375 // Helper function to find or create the arguments object for
2372 // Runtime_DebugEvaluate. 2376 // Runtime_DebugEvaluate.
2373 static void MaterializeArgumentsObject(Isolate* isolate, 2377 static void MaterializeArgumentsObject(Isolate* isolate,
2374 Handle<JSObject> target, 2378 Handle<JSObject> target,
2375 Handle<JSFunction> function) { 2379 Handle<JSFunction> function) {
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
2702 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 2706 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2703 isolate, result, DebugEvaluate(isolate, outer_info, context, 2707 isolate, result, DebugEvaluate(isolate, outer_info, context,
2704 context_extension, receiver, source)); 2708 context_extension, receiver, source));
2705 return *result; 2709 return *result;
2706 } 2710 }
2707 2711
2708 2712
2709 RUNTIME_FUNCTION(Runtime_DebugGetLoadedScripts) { 2713 RUNTIME_FUNCTION(Runtime_DebugGetLoadedScripts) {
2710 HandleScope scope(isolate); 2714 HandleScope scope(isolate);
2711 DCHECK(args.length() == 0); 2715 DCHECK(args.length() == 0);
2716 RUNTIME_ASSERT(isolate->debug()->is_active());
2712 2717
2713 Handle<FixedArray> instances; 2718 Handle<FixedArray> instances;
2714 { 2719 {
2715 DebugScope debug_scope(isolate->debug()); 2720 DebugScope debug_scope(isolate->debug());
2716 if (debug_scope.failed()) { 2721 if (debug_scope.failed()) {
2717 DCHECK(isolate->has_pending_exception()); 2722 DCHECK(isolate->has_pending_exception());
2718 return isolate->heap()->exception(); 2723 return isolate->heap()->exception();
2719 } 2724 }
2720 // Fill the script objects. 2725 // Fill the script objects.
2721 instances = isolate->debug()->GetLoadedScripts(); 2726 instances = isolate->debug()->GetLoadedScripts();
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
2969 return f->shared()->inferred_name(); 2974 return f->shared()->inferred_name();
2970 } 2975 }
2971 2976
2972 2977
2973 // A testing entry. Returns statement position which is the closest to 2978 // A testing entry. Returns statement position which is the closest to
2974 // source_position. 2979 // source_position.
2975 RUNTIME_FUNCTION(Runtime_GetFunctionCodePositionFromSource) { 2980 RUNTIME_FUNCTION(Runtime_GetFunctionCodePositionFromSource) {
2976 HandleScope scope(isolate); 2981 HandleScope scope(isolate);
2977 CHECK(isolate->debug()->live_edit_enabled()); 2982 CHECK(isolate->debug()->live_edit_enabled());
2978 DCHECK(args.length() == 2); 2983 DCHECK(args.length() == 2);
2984 RUNTIME_ASSERT(isolate->debug()->is_active());
2979 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); 2985 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
2980 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]); 2986 CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]);
2981 2987
2982 Handle<Code> code(function->code(), isolate); 2988 Handle<Code> code(function->code(), isolate);
2983 2989
2984 if (code->kind() != Code::FUNCTION && 2990 if (code->kind() != Code::FUNCTION &&
2985 code->kind() != Code::OPTIMIZED_FUNCTION) { 2991 code->kind() != Code::OPTIMIZED_FUNCTION) {
2986 return isolate->heap()->undefined_value(); 2992 return isolate->heap()->undefined_value();
2987 } 2993 }
2988 2994
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
3110 callback->IsJSFunction() && 3116 callback->IsJSFunction() &&
3111 (!JSFunction::cast(callback)->IsBuiltin() || 3117 (!JSFunction::cast(callback)->IsBuiltin() ||
3112 JSFunction::cast(callback)->shared()->bound())); 3118 JSFunction::cast(callback)->shared()->bound()));
3113 } 3119 }
3114 3120
3115 3121
3116 // Set one shot breakpoints for the callback function that is passed to a 3122 // Set one shot breakpoints for the callback function that is passed to a
3117 // built-in function such as Array.forEach to enable stepping into the callback. 3123 // built-in function such as Array.forEach to enable stepping into the callback.
3118 RUNTIME_FUNCTION(Runtime_DebugPrepareStepInIfStepping) { 3124 RUNTIME_FUNCTION(Runtime_DebugPrepareStepInIfStepping) {
3119 DCHECK(args.length() == 1); 3125 DCHECK(args.length() == 1);
3126 RUNTIME_ASSERT(isolate->debug()->is_active());
3127
3120 Debug* debug = isolate->debug(); 3128 Debug* debug = isolate->debug();
3121 if (!debug->IsStepping()) return isolate->heap()->undefined_value(); 3129 if (!debug->IsStepping()) return isolate->heap()->undefined_value();
3122 3130
3123 HandleScope scope(isolate); 3131 HandleScope scope(isolate);
3124 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); 3132 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
3125 RUNTIME_ASSERT(object->IsJSFunction() || object->IsJSGeneratorObject()); 3133 RUNTIME_ASSERT(object->IsJSFunction() || object->IsJSGeneratorObject());
3126 Handle<JSFunction> fun; 3134 Handle<JSFunction> fun;
3127 if (object->IsJSFunction()) { 3135 if (object->IsJSFunction()) {
3128 fun = Handle<JSFunction>::cast(object); 3136 fun = Handle<JSFunction>::cast(object);
3129 } else { 3137 } else {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
3180 return Smi::FromInt(isolate->debug()->is_active()); 3188 return Smi::FromInt(isolate->debug()->is_active());
3181 } 3189 }
3182 3190
3183 3191
3184 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { 3192 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) {
3185 UNIMPLEMENTED(); 3193 UNIMPLEMENTED();
3186 return NULL; 3194 return NULL;
3187 } 3195 }
3188 } // namespace internal 3196 } // namespace internal
3189 } // namespace v8 3197 } // namespace v8
OLDNEW
« no previous file with comments | « src/debug.cc ('k') | test/cctest/cctest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698