Chromium Code Reviews| Index: runtime/vm/debugger.cc |
| =================================================================== |
| --- runtime/vm/debugger.cc (revision 13208) |
| +++ runtime/vm/debugger.cc (working copy) |
| @@ -28,7 +28,8 @@ |
| DEFINE_FLAG(bool, verbose_debug, false, "Verbose debugger messages"); |
| -static void DefaultBreakpointHandler(SourceBreakpoint* bpt, |
| +static void DefaultBreakpointHandler(Dart_Port isolate_id, |
| + SourceBreakpoint* bpt, |
| DebuggerStackTrace* stack) { |
| String& var_name = String::Handle(); |
| Instance& value = Instance::Handle(); |
| @@ -168,7 +169,21 @@ |
| event.type = type; |
| event.isolate_id = debugger->GetIsolateId(); |
| ASSERT(event.isolate_id != ILLEGAL_ISOLATE_ID); |
| - (*event_handler_)(&event); |
| + if (type == kIsolateInterrupted) { |
| + DebuggerStackTrace* stack_trace = debugger->CollectStackTrace(); |
| + ASSERT(stack_trace->Length() > 0); |
| + ASSERT(debugger->stack_trace_ == NULL); |
| + ASSERT(debugger->obj_cache_ == NULL); |
| + debugger->obj_cache_ = new RemoteObjectCache(64); |
| + debugger->stack_trace_ = stack_trace; |
| + (*event_handler_)(&event); |
| + debugger->stack_trace_ = NULL; |
| + debugger->obj_cache_ = NULL; // Remote object cache is zone allocated. |
| + // TODO(asiva): Need some work here to be able to single step after |
| + // an interrupt. |
| + } else { |
| + (*event_handler_)(&event); |
| + } |
| } |
| } |
| @@ -1337,12 +1352,15 @@ |
| if (notify_frontend) { |
| resume_action_ = kContinue; |
| if (bp_handler_ != NULL) { |
| + Isolate* isolate = Isolate::Current(); |
|
hausner
2012/10/05 18:06:34
Why do you need to get the debugger object through
siva
2012/10/05 22:35:06
Good point, this is not a static function so just
|
| + ASSERT(isolate != NULL); |
| + ASSERT(isolate->debugger() != NULL); |
| SourceBreakpoint* src_bpt = bpt->src_bpt(); |
| ASSERT(stack_trace_ == NULL); |
| ASSERT(obj_cache_ == NULL); |
| obj_cache_ = new RemoteObjectCache(64); |
| stack_trace_ = stack_trace; |
| - (*bp_handler_)(src_bpt, stack_trace); |
| + (*bp_handler_)(isolate->debugger()->GetIsolateId(), src_bpt, stack_trace); |
| stack_trace_ = NULL; |
| obj_cache_ = NULL; // Remote object cache is zone allocated. |
| last_bpt_line_ = bpt->LineNumber(); |