| Index: runtime/vm/debugger.cc
|
| diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
|
| index d5d82c729f445a695b2614ff4e91e58244f31bb7..939dafdd8fdfab7866e6af741d3633fe4051c6e6 100644
|
| --- a/runtime/vm/debugger.cc
|
| +++ b/runtime/vm/debugger.cc
|
| @@ -235,7 +235,32 @@ ActivationFrame::ActivationFrame(
|
|
|
|
|
| bool Debugger::HasEventHandler() {
|
| - return (event_handler_ != NULL) || Service::NeedsEvents();
|
| + return ((event_handler_ != NULL) ||
|
| + Service::NeedsIsolateEvents() ||
|
| + Service::NeedsDebugEvents());
|
| +}
|
| +
|
| +
|
| +static bool ServiceNeedsDebuggerEvent(DebuggerEvent::EventType type) {
|
| + switch (type) {
|
| + case DebuggerEvent::kBreakpointResolved:
|
| + // kBreakpointResolved events are handled differently in the vm
|
| + // service, so suppress them here.
|
| + return false;
|
| +
|
| + case DebuggerEvent::kBreakpointReached:
|
| + case DebuggerEvent::kExceptionThrown:
|
| + case DebuggerEvent::kIsolateInterrupted:
|
| + return Service::NeedsDebugEvents();
|
| +
|
| + case DebuggerEvent::kIsolateCreated:
|
| + case DebuggerEvent::kIsolateShutdown:
|
| + return Service::NeedsIsolateEvents();
|
| +
|
| + default:
|
| + UNREACHABLE();
|
| + return false;
|
| + }
|
| }
|
|
|
|
|
| @@ -247,8 +272,7 @@ void Debugger::InvokeEventHandler(DebuggerEvent* event) {
|
| //
|
| // kBreakpointResolved events are handled differently in the vm
|
| // service, so suppress them here.
|
| - if (Service::NeedsEvents() &&
|
| - (event->type() != DebuggerEvent::kBreakpointResolved)) {
|
| + if (ServiceNeedsDebuggerEvent(event->type())) {
|
| ServiceEvent service_event(event);
|
| Service::HandleEvent(&service_event);
|
| }
|
| @@ -260,7 +284,7 @@ void Debugger::InvokeEventHandler(DebuggerEvent* event) {
|
| (*event_handler_)(event);
|
| }
|
|
|
| - if (Service::NeedsEvents() && event->IsPauseEvent()) {
|
| + if (ServiceNeedsDebuggerEvent(event->type()) && event->IsPauseEvent()) {
|
| // If we were paused, notify the service that we have resumed.
|
| ServiceEvent service_event(event->isolate(), ServiceEvent::kResume);
|
| service_event.set_top_frame(event->top_frame());
|
| @@ -303,7 +327,7 @@ void Debugger::SignalIsolateInterrupted() {
|
| // than the regular debugger breakpoint notifications.
|
| static void SendServiceBreakpointEvent(ServiceEvent::EventType type,
|
| Breakpoint* bpt) {
|
| - if (Service::NeedsEvents()) {
|
| + if (Service::NeedsDebugEvents()) {
|
| ServiceEvent service_event(Isolate::Current(), type);
|
| service_event.set_breakpoint(bpt);
|
| Service::HandleEvent(&service_event);
|
|
|