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

Side by Side Diff: runtime/vm/debugger_api_impl.cc

Issue 1146173003: Per-closure breakpoints; restructure breakpoint implementation to keep a list of conditions. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 7 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 | « runtime/vm/debugger.cc ('k') | runtime/vm/json_stream.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "include/dart_debugger_api.h" 5 #include "include/dart_debugger_api.h"
6 6
7 #include "vm/class_finalizer.h" 7 #include "vm/class_finalizer.h"
8 #include "vm/compiler.h" 8 #include "vm/compiler.h"
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/dart_api_state.h" 10 #include "vm/dart_api_state.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 location.token_pos = top_frame->TokenPos(); 123 location.token_pos = top_frame->TokenPos();
124 intptr_t bp_id = 0; 124 intptr_t bp_id = 0;
125 if (event->breakpoint() != NULL) { 125 if (event->breakpoint() != NULL) {
126 ASSERT(event->breakpoint()->id() != ILLEGAL_BREAKPOINT_ID); 126 ASSERT(event->breakpoint()->id() != ILLEGAL_BREAKPOINT_ID);
127 bp_id = event->breakpoint()->id(); 127 bp_id = event->breakpoint()->id();
128 } 128 }
129 (*paused_event_handler)(isolate_id, bp_id, location); 129 (*paused_event_handler)(isolate_id, bp_id, location);
130 } 130 }
131 } else if (event->type() == DebuggerEvent::kBreakpointResolved) { 131 } else if (event->type() == DebuggerEvent::kBreakpointResolved) {
132 if (bp_resolved_handler != NULL) { 132 if (bp_resolved_handler != NULL) {
133 SourceBreakpoint* bpt = event->breakpoint(); 133 Breakpoint* bpt = event->breakpoint();
134 ASSERT(bpt != NULL); 134 ASSERT(bpt != NULL);
135 Dart_CodeLocation location; 135 Dart_CodeLocation location;
136 Library& library = Library::Handle(isolate); 136 Library& library = Library::Handle(isolate);
137 Script& script = Script::Handle(isolate); 137 Script& script = Script::Handle(isolate);
138 intptr_t token_pos; 138 intptr_t token_pos;
139 bpt->GetCodeLocation(&library, &script, &token_pos); 139 bpt->bpt_location()->GetCodeLocation(&library, &script, &token_pos);
140 location.script_url = Api::NewHandle(isolate, script.url()); 140 location.script_url = Api::NewHandle(isolate, script.url());
141 location.library_id = library.index(); 141 location.library_id = library.index();
142 location.token_pos = token_pos; 142 location.token_pos = token_pos;
143 (*bp_resolved_handler)(isolate_id, bpt->id(), location); 143 (*bp_resolved_handler)(isolate_id, bpt->id(), location);
144 } 144 }
145 } else if (event->type() == DebuggerEvent::kExceptionThrown) { 145 } else if (event->type() == DebuggerEvent::kExceptionThrown) {
146 if (exc_thrown_handler != NULL) { 146 if (exc_thrown_handler != NULL) {
147 Dart_Handle exception = 147 Dart_Handle exception =
148 Api::NewHandle(isolate, event->exception()->raw()); 148 Api::NewHandle(isolate, event->exception()->raw());
149 Dart_StackTrace trace = 149 Dart_StackTrace trace =
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 334
335 DART_EXPORT Dart_Handle Dart_SetBreakpoint( 335 DART_EXPORT Dart_Handle Dart_SetBreakpoint(
336 Dart_Handle script_url_in, 336 Dart_Handle script_url_in,
337 intptr_t line_number) { 337 intptr_t line_number) {
338 Isolate* isolate = Isolate::Current(); 338 Isolate* isolate = Isolate::Current();
339 DARTSCOPE(isolate); 339 DARTSCOPE(isolate);
340 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); 340 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in);
341 341
342 Debugger* debugger = isolate->debugger(); 342 Debugger* debugger = isolate->debugger();
343 ASSERT(debugger != NULL); 343 ASSERT(debugger != NULL);
344 SourceBreakpoint* bpt = 344 Breakpoint* bpt =
345 debugger->SetBreakpointAtLine(script_url, line_number); 345 debugger->SetBreakpointAtLine(script_url, line_number);
346 if (bpt == NULL) { 346 if (bpt == NULL) {
347 return Api::NewError("%s: could not set breakpoint at line %" Pd " in '%s'", 347 return Api::NewError("%s: could not set breakpoint at line %" Pd " in '%s'",
348 CURRENT_FUNC, line_number, script_url.ToCString()); 348 CURRENT_FUNC, line_number, script_url.ToCString());
349 } 349 }
350 return Dart_NewInteger(bpt->id()); 350 return Dart_NewInteger(bpt->id());
351 } 351 }
352 352
353 353
354 DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) { 354 DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) {
355 Isolate* isolate = Isolate::Current(); 355 Isolate* isolate = Isolate::Current();
356 DARTSCOPE(isolate); 356 DARTSCOPE(isolate);
357 Debugger* debugger = isolate->debugger(); 357 Debugger* debugger = isolate->debugger();
358 ASSERT(debugger != NULL); 358 ASSERT(debugger != NULL);
359 359
360 SourceBreakpoint* bpt = debugger->GetBreakpointById(bp_id); 360 Breakpoint* bpt = debugger->GetBreakpointById(bp_id);
361 if (bpt == NULL) { 361 if (bpt == NULL) {
362 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", 362 return Api::NewError("%s: breakpoint with id %" Pd " does not exist",
363 CURRENT_FUNC, bp_id); 363 CURRENT_FUNC, bp_id);
364 } 364 }
365 return Api::NewHandle(isolate, bpt->url()); 365 return Api::NewHandle(isolate, bpt->bpt_location()->url());
366 } 366 }
367 367
368 368
369 DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) { 369 DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) {
370 Isolate* isolate = Isolate::Current(); 370 Isolate* isolate = Isolate::Current();
371 DARTSCOPE(isolate); 371 DARTSCOPE(isolate);
372 Debugger* debugger = isolate->debugger(); 372 Debugger* debugger = isolate->debugger();
373 ASSERT(debugger != NULL); 373 ASSERT(debugger != NULL);
374 374
375 SourceBreakpoint* bpt = debugger->GetBreakpointById(bp_id); 375 Breakpoint* bpt = debugger->GetBreakpointById(bp_id);
376 if (bpt == NULL) { 376 if (bpt == NULL) {
377 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", 377 return Api::NewError("%s: breakpoint with id %" Pd " does not exist",
378 CURRENT_FUNC, bp_id); 378 CURRENT_FUNC, bp_id);
379 } 379 }
380 return Dart_NewInteger(bpt->LineNumber()); 380 return Dart_NewInteger(bpt->bpt_location()->LineNumber());
381 } 381 }
382 382
383 383
384 DART_EXPORT Dart_Handle Dart_SetBreakpointAtEntry( 384 DART_EXPORT Dart_Handle Dart_SetBreakpointAtEntry(
385 Dart_Handle library_in, 385 Dart_Handle library_in,
386 Dart_Handle class_name_in, 386 Dart_Handle class_name_in,
387 Dart_Handle function_name_in) { 387 Dart_Handle function_name_in) {
388 Isolate* isolate = Isolate::Current(); 388 Isolate* isolate = Isolate::Current();
389 DARTSCOPE(isolate); 389 DARTSCOPE(isolate);
390 UNWRAP_AND_CHECK_PARAM(Library, library, library_in); 390 UNWRAP_AND_CHECK_PARAM(Library, library, library_in);
(...skipping 13 matching lines...) Expand all
404 debugger->ResolveFunction(library, class_name, function_name)); 404 debugger->ResolveFunction(library, class_name, function_name));
405 if (bp_target.IsNull()) { 405 if (bp_target.IsNull()) {
406 const bool toplevel = class_name.Length() == 0; 406 const bool toplevel = class_name.Length() == 0;
407 return Api::NewError("%s: could not find function '%s%s%s'", 407 return Api::NewError("%s: could not find function '%s%s%s'",
408 CURRENT_FUNC, 408 CURRENT_FUNC,
409 toplevel ? "" : class_name.ToCString(), 409 toplevel ? "" : class_name.ToCString(),
410 toplevel ? "" : ".", 410 toplevel ? "" : ".",
411 function_name.ToCString()); 411 function_name.ToCString());
412 } 412 }
413 413
414 SourceBreakpoint* bpt = debugger->SetBreakpointAtEntry(bp_target); 414 Breakpoint* bpt = debugger->SetBreakpointAtEntry(bp_target, false);
415 if (bpt == NULL) { 415 if (bpt == NULL) {
416 const char* target_name = Debugger::QualifiedFunctionName(bp_target); 416 const char* target_name = Debugger::QualifiedFunctionName(bp_target);
417 return Api::NewError("%s: no breakpoint location found in '%s'", 417 return Api::NewError("%s: no breakpoint location found in '%s'",
418 CURRENT_FUNC, target_name); 418 CURRENT_FUNC, target_name);
419 } 419 }
420 return Dart_NewInteger(bpt->id()); 420 return Dart_NewInteger(bpt->id());
421 } 421 }
422 422
423 423
424 DART_EXPORT Dart_Handle Dart_OneTimeBreakAtEntry( 424 DART_EXPORT Dart_Handle Dart_OneTimeBreakAtEntry(
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 return Api::CastIsolate(isolate); 980 return Api::CastIsolate(isolate);
981 } 981 }
982 982
983 983
984 DART_EXPORT Dart_IsolateId Dart_GetIsolateId(Dart_Isolate dart_isolate) { 984 DART_EXPORT Dart_IsolateId Dart_GetIsolateId(Dart_Isolate dart_isolate) {
985 Isolate* isolate = reinterpret_cast<Isolate*>(dart_isolate); 985 Isolate* isolate = reinterpret_cast<Isolate*>(dart_isolate);
986 return isolate->debugger()->GetIsolateId(); 986 return isolate->debugger()->GetIsolateId();
987 } 987 }
988 988
989 } // namespace dart 989 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/debugger.cc ('k') | runtime/vm/json_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698