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

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

Issue 1168933002: Fixes crashes in VM isolate shutdown. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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 | « runtime/vm/debugger.cc ('k') | runtime/vm/isolate.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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 103
104 static Dart_PausedEventHandler* paused_event_handler = NULL; 104 static Dart_PausedEventHandler* paused_event_handler = NULL;
105 static Dart_BreakpointResolvedHandler* bp_resolved_handler = NULL; 105 static Dart_BreakpointResolvedHandler* bp_resolved_handler = NULL;
106 static Dart_ExceptionThrownHandler* exc_thrown_handler = NULL; 106 static Dart_ExceptionThrownHandler* exc_thrown_handler = NULL;
107 static Dart_IsolateEventHandler* isolate_event_handler = NULL; 107 static Dart_IsolateEventHandler* isolate_event_handler = NULL;
108 108
109 109
110 static void DebuggerEventHandler(DebuggerEvent* event) { 110 static void DebuggerEventHandler(DebuggerEvent* event) {
111 Isolate* isolate = Isolate::Current(); 111 Isolate* isolate = Isolate::Current();
112 ASSERT(isolate != NULL); 112 ASSERT(isolate != NULL);
113 ASSERT(isolate->debugger() != NULL);
114 Dart_EnterScope(); 113 Dart_EnterScope();
115 Dart_IsolateId isolate_id = isolate->debugger()->GetIsolateId(); 114 Dart_IsolateId isolate_id = isolate->debugger()->GetIsolateId();
116 if (event->type() == DebuggerEvent::kBreakpointReached) { 115 if (event->type() == DebuggerEvent::kBreakpointReached) {
117 if (paused_event_handler != NULL) { 116 if (paused_event_handler != NULL) {
118 Dart_CodeLocation location; 117 Dart_CodeLocation location;
119 ActivationFrame* top_frame = event->top_frame(); 118 ActivationFrame* top_frame = event->top_frame();
120 location.script_url = Api::NewHandle(isolate, top_frame->SourceUrl()); 119 location.script_url = Api::NewHandle(isolate, top_frame->SourceUrl());
121 const Library& lib = Library::Handle(top_frame->Library()); 120 const Library& lib = Library::Handle(top_frame->Library());
122 location.library_id = lib.index(); 121 location.library_id = lib.index();
123 location.token_pos = top_frame->TokenPos(); 122 location.token_pos = top_frame->TokenPos();
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 332
334 333
335 DART_EXPORT Dart_Handle Dart_SetBreakpoint( 334 DART_EXPORT Dart_Handle Dart_SetBreakpoint(
336 Dart_Handle script_url_in, 335 Dart_Handle script_url_in,
337 intptr_t line_number) { 336 intptr_t line_number) {
338 Isolate* isolate = Isolate::Current(); 337 Isolate* isolate = Isolate::Current();
339 DARTSCOPE(isolate); 338 DARTSCOPE(isolate);
340 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in); 339 UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in);
341 340
342 Debugger* debugger = isolate->debugger(); 341 Debugger* debugger = isolate->debugger();
343 ASSERT(debugger != NULL);
344 Breakpoint* bpt = 342 Breakpoint* bpt =
345 debugger->SetBreakpointAtLine(script_url, line_number); 343 debugger->SetBreakpointAtLine(script_url, line_number);
346 if (bpt == NULL) { 344 if (bpt == NULL) {
347 return Api::NewError("%s: could not set breakpoint at line %" Pd " in '%s'", 345 return Api::NewError("%s: could not set breakpoint at line %" Pd " in '%s'",
348 CURRENT_FUNC, line_number, script_url.ToCString()); 346 CURRENT_FUNC, line_number, script_url.ToCString());
349 } 347 }
350 return Dart_NewInteger(bpt->id()); 348 return Dart_NewInteger(bpt->id());
351 } 349 }
352 350
353 351
354 DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) { 352 DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) {
355 Isolate* isolate = Isolate::Current(); 353 Isolate* isolate = Isolate::Current();
356 DARTSCOPE(isolate); 354 DARTSCOPE(isolate);
357 Debugger* debugger = isolate->debugger(); 355 Debugger* debugger = isolate->debugger();
358 ASSERT(debugger != NULL);
359 356
360 Breakpoint* bpt = debugger->GetBreakpointById(bp_id); 357 Breakpoint* bpt = debugger->GetBreakpointById(bp_id);
361 if (bpt == NULL) { 358 if (bpt == NULL) {
362 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", 359 return Api::NewError("%s: breakpoint with id %" Pd " does not exist",
363 CURRENT_FUNC, bp_id); 360 CURRENT_FUNC, bp_id);
364 } 361 }
365 return Api::NewHandle(isolate, bpt->bpt_location()->url()); 362 return Api::NewHandle(isolate, bpt->bpt_location()->url());
366 } 363 }
367 364
368 365
369 DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) { 366 DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) {
370 Isolate* isolate = Isolate::Current(); 367 Isolate* isolate = Isolate::Current();
371 DARTSCOPE(isolate); 368 DARTSCOPE(isolate);
372 Debugger* debugger = isolate->debugger(); 369 Debugger* debugger = isolate->debugger();
373 ASSERT(debugger != NULL);
374 370
375 Breakpoint* bpt = debugger->GetBreakpointById(bp_id); 371 Breakpoint* bpt = debugger->GetBreakpointById(bp_id);
376 if (bpt == NULL) { 372 if (bpt == NULL) {
377 return Api::NewError("%s: breakpoint with id %" Pd " does not exist", 373 return Api::NewError("%s: breakpoint with id %" Pd " does not exist",
378 CURRENT_FUNC, bp_id); 374 CURRENT_FUNC, bp_id);
379 } 375 }
380 return Dart_NewInteger(bpt->bpt_location()->LineNumber()); 376 return Dart_NewInteger(bpt->bpt_location()->LineNumber());
381 } 377 }
382 378
383 379
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 if (!error.IsNull()) { 452 if (!error.IsNull()) {
457 return Api::NewHandle(isolate, error.raw()); 453 return Api::NewHandle(isolate, error.raw());
458 } 454 }
459 return Api::Success(); 455 return Api::Success();
460 } 456 }
461 457
462 458
463 DART_EXPORT Dart_Handle Dart_RemoveBreakpoint(intptr_t bp_id) { 459 DART_EXPORT Dart_Handle Dart_RemoveBreakpoint(intptr_t bp_id) {
464 Isolate* isolate = Isolate::Current(); 460 Isolate* isolate = Isolate::Current();
465 DARTSCOPE(isolate); 461 DARTSCOPE(isolate);
466 Debugger* debugger = isolate->debugger();
467 ASSERT(debugger != NULL);
468
469 isolate->debugger()->RemoveBreakpoint(bp_id); 462 isolate->debugger()->RemoveBreakpoint(bp_id);
470 return Api::Success(); 463 return Api::Success();
471 } 464 }
472 465
473 466
474 DART_EXPORT Dart_Handle Dart_SetStepOver() { 467 DART_EXPORT Dart_Handle Dart_SetStepOver() {
475 Isolate* isolate = Isolate::Current(); 468 Isolate* isolate = Isolate::Current();
476 DARTSCOPE(isolate); 469 DARTSCOPE(isolate);
477 isolate->debugger()->SetStepOver(); 470 isolate->debugger()->SetStepOver();
478 return Api::Success(); 471 return Api::Success();
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 return Api::CastIsolate(isolate); 973 return Api::CastIsolate(isolate);
981 } 974 }
982 975
983 976
984 DART_EXPORT Dart_IsolateId Dart_GetIsolateId(Dart_Isolate dart_isolate) { 977 DART_EXPORT Dart_IsolateId Dart_GetIsolateId(Dart_Isolate dart_isolate) {
985 Isolate* isolate = reinterpret_cast<Isolate*>(dart_isolate); 978 Isolate* isolate = reinterpret_cast<Isolate*>(dart_isolate);
986 return isolate->debugger()->GetIsolateId(); 979 return isolate->debugger()->GetIsolateId();
987 } 980 }
988 981
989 } // namespace dart 982 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/debugger.cc ('k') | runtime/vm/isolate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698