| Index: runtime/vm/debugger.cc
|
| diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
|
| index e66f9649a9817559e084b7137f470731606f595b..f8fd3189b5c312940ce97daaa647f28dc0fa02e4 100644
|
| --- a/runtime/vm/debugger.cc
|
| +++ b/runtime/vm/debugger.cc
|
| @@ -99,10 +99,9 @@ void SourceBreakpoint::SetResolved(const Function& func, intptr_t token_pos) {
|
| // TODO(hausner): Get rid of library parameter. A source breakpoint location
|
| // does not imply a library, since the same source code can be included
|
| // in more than one library, e.g. the text location of mixin functions.
|
| -void SourceBreakpoint::GetCodeLocation(
|
| - Library* lib,
|
| - Script* script,
|
| - intptr_t* pos) {
|
| +void SourceBreakpoint::GetCodeLocation(Library* lib,
|
| + Script* script,
|
| + intptr_t* pos) {
|
| *script = this->script();
|
| *pos = token_pos_;
|
| if (IsResolved()) {
|
| @@ -192,12 +191,12 @@ ActivationFrame::ActivationFrame(
|
| }
|
|
|
|
|
| -void Debugger::SignalIsolateEvent(EventType type) {
|
| +void Debugger::SignalIsolateEvent(DebuggerEvent::EventType type) {
|
| if (event_handler_ != NULL) {
|
| DebuggerEvent event(type);
|
| - event.isolate_id = isolate_id_;
|
| - ASSERT(event.isolate_id != ILLEGAL_ISOLATE_ID);
|
| - if (type == kIsolateInterrupted) {
|
| + event.set_isolate_id(isolate_id_);
|
| + ASSERT(event.isolate_id() != ILLEGAL_ISOLATE_ID);
|
| + if (type == DebuggerEvent::kIsolateInterrupted) {
|
| DebuggerStackTrace* trace = CollectStackTrace();
|
| ASSERT(trace->Length() > 0);
|
| ASSERT(stack_trace_ == NULL);
|
| @@ -217,7 +216,7 @@ void Debugger::SignalIsolateInterrupted() {
|
| if (event_handler_ != NULL) {
|
| Debugger* debugger = Isolate::Current()->debugger();
|
| ASSERT(debugger != NULL);
|
| - debugger->SignalIsolateEvent(kIsolateInterrupted);
|
| + debugger->SignalIsolateEvent(DebuggerEvent::kIsolateInterrupted);
|
| }
|
| }
|
|
|
| @@ -487,6 +486,43 @@ RawContext* ActivationFrame::GetSavedCurrentContext() {
|
| }
|
|
|
|
|
| +const char* DebuggerEvent::EventTypeToCString(EventType type) {
|
| + switch (type) {
|
| + case kBreakpointReached:
|
| + return "BreakpointReached";
|
| + case kBreakpointResolved:
|
| + return "BreakpointResolved";
|
| + case kExceptionThrown:
|
| + return "ExceptionThrown";
|
| + case kIsolateCreated:
|
| + return "IsolateCreated";
|
| + case kIsolateShutdown:
|
| + return "IsolateShutdown";
|
| + case kIsolateInterrupted:
|
| + return "IsolateInterrupted";
|
| + default:
|
| + UNREACHABLE();
|
| + return "Unknown";
|
| + }
|
| +}
|
| +
|
| +
|
| +void DebuggerEvent::PrintJSON(JSONStream* js) const {
|
| + JSONObject jsobj(js);
|
| + jsobj.AddProperty("type", "DebuggerEvent");
|
| + // TODO(turnidge): Drop the 'id' for things like DebuggerEvent.
|
| + jsobj.AddProperty("id", "");
|
| + // TODO(turnidge): Add 'isolate'.
|
| + jsobj.AddProperty("eventType", EventTypeToCString(type()));
|
| + if (type() == kBreakpointResolved || type() == kBreakpointReached) {
|
| + jsobj.AddProperty("breakpoint", breakpoint());
|
| + }
|
| + if (type() == kExceptionThrown) {
|
| + jsobj.AddProperty("exception", *(exception()));
|
| + }
|
| +}
|
| +
|
| +
|
| ActivationFrame* DebuggerStackTrace::GetHandlerFrame(
|
| const Instance& exc_obj) const {
|
| ExceptionHandlers& handlers = ExceptionHandlers::Handle();
|
| @@ -1030,7 +1066,7 @@ void Debugger::Shutdown() {
|
| delete bpt;
|
| }
|
| // Signal isolate shutdown event.
|
| - SignalIsolateEvent(Debugger::kIsolateShutdown);
|
| + SignalIsolateEvent(DebuggerEvent::kIsolateShutdown);
|
| }
|
|
|
|
|
| @@ -1176,8 +1212,8 @@ void Debugger::SetInternalBreakpoints(const Function& target_function) {
|
|
|
| void Debugger::SignalBpResolved(SourceBreakpoint* bpt) {
|
| if (event_handler_ != NULL) {
|
| - DebuggerEvent event(kBreakpointResolved);
|
| - event.breakpoint = bpt;
|
| + DebuggerEvent event(DebuggerEvent::kBreakpointResolved);
|
| + event.set_breakpoint(bpt);
|
| (*event_handler_)(&event);
|
| }
|
| }
|
| @@ -1480,8 +1516,8 @@ void Debugger::SignalExceptionThrown(const Instance& exc) {
|
| if (!ShouldPauseOnException(stack_trace, exc)) {
|
| return;
|
| }
|
| - DebuggerEvent event(kExceptionThrown);
|
| - event.exception = &exc;
|
| + DebuggerEvent event(DebuggerEvent::kExceptionThrown);
|
| + event.set_exception(&exc);
|
| ASSERT(stack_trace_ == NULL);
|
| stack_trace_ = stack_trace;
|
| Pause(&event);
|
| @@ -2166,6 +2202,7 @@ void Debugger::HandleSteppingRequest(DebuggerStackTrace* stack_trace) {
|
| }
|
|
|
|
|
| +// static
|
| bool Debugger::IsDebuggable(const Function& func) {
|
| if (!IsDebuggableFunctionKind(func)) {
|
| return false;
|
| @@ -2183,9 +2220,9 @@ void Debugger::SignalPausedEvent(ActivationFrame* top_frame,
|
| isolate_->set_single_step(false);
|
| ASSERT(!IsPaused());
|
| ASSERT(obj_cache_ == NULL);
|
| - DebuggerEvent event(kBreakpointReached);
|
| - event.top_frame = top_frame;
|
| - event.breakpoint = bpt;
|
| + DebuggerEvent event(DebuggerEvent::kBreakpointReached);
|
| + event.set_top_frame(top_frame);
|
| + event.set_breakpoint(bpt);
|
| Pause(&event);
|
| }
|
|
|
| @@ -2297,7 +2334,7 @@ void Debugger::Initialize(Isolate* isolate) {
|
| initialized_ = true;
|
|
|
| // Signal isolate creation event.
|
| - SignalIsolateEvent(Debugger::kIsolateCreated);
|
| + SignalIsolateEvent(DebuggerEvent::kIsolateCreated);
|
| }
|
|
|
|
|
|
|