| Index: runtime/vm/debugger.cc
|
| ===================================================================
|
| --- runtime/vm/debugger.cc (revision 24991)
|
| +++ runtime/vm/debugger.cc (working copy)
|
| @@ -935,15 +935,20 @@
|
| Context& ctx = Context::Handle(isolate->top_context());
|
| Code& code = Code::Handle(isolate);
|
| StackFrameIterator iterator(false);
|
| - StackFrame* frame = iterator.NextFrame();
|
| ActivationFrame* callee_activation = NULL;
|
| bool optimized_frame_found = false;
|
| - while (frame != NULL) {
|
| + for (StackFrame* frame = iterator.NextFrame();
|
| + frame != NULL;
|
| + frame = iterator.NextFrame()) {
|
| ASSERT(frame->IsValid());
|
| if (frame->IsDartFrame()) {
|
| code = frame->LookupDartCode();
|
| ActivationFrame* activation =
|
| new ActivationFrame(frame->pc(), frame->fp(), frame->sp(), code);
|
| + // Check if frame is a debuggable function.
|
| + if (!IsDebuggable(activation->function())) {
|
| + continue;
|
| + }
|
| // If this activation frame called a closure, the function has
|
| // saved its context before the call.
|
| if ((callee_activation != NULL) &&
|
| @@ -980,7 +985,6 @@
|
| ctx = reinterpret_cast<EntryFrame*>(frame)->SavedContext();
|
| callee_activation = NULL;
|
| }
|
| - frame = iterator.NextFrame();
|
| }
|
| return stack_trace;
|
| }
|
| @@ -1534,7 +1538,8 @@
|
| (fkind == RawFunction::kImplicitSetter) ||
|
| (fkind == RawFunction::kConstImplicitGetter) ||
|
| (fkind == RawFunction::kMethodExtractor) ||
|
| - (fkind == RawFunction::kNoSuchMethodDispatcher)) {
|
| + (fkind == RawFunction::kNoSuchMethodDispatcher) ||
|
| + (fkind == RawFunction::kInvokeFieldDispatcher)) {
|
| return false;
|
| }
|
| const Class& cls = Class::Handle(func.Owner());
|
|
|