Index: runtime/vm/debugger.cc |
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc |
index 05ecbcbdb5b33d7d8ee58ecc9bbd19f1a16c572f..5fc539ddd2b532378602828dcf4529d889062505 100644 |
--- a/runtime/vm/debugger.cc |
+++ b/runtime/vm/debugger.cc |
@@ -2275,6 +2275,29 @@ void Debugger::SignalBpReached() { |
} |
+void Debugger::BreakHere() { |
+ // We ignore this breakpoint when the VM is executing code invoked |
+ // by the debugger to evaluate variables values, or when we see a nested |
+ // breakpoint or exception event. |
+ if (ignore_breakpoints_ || IsPaused() || !HasEventHandler()) { |
+ return; |
+ } |
+ |
+ DebuggerStackTrace* stack_trace = CollectStackTrace(); |
+ ASSERT(stack_trace->Length() > 0); |
+ ASSERT(stack_trace_ == NULL); |
+ stack_trace_ = stack_trace; |
+ |
+ // We are in the native call to Debugger_breakHere or Debugger_breakHereIf, |
+ // the developer gets a better experience by not seeing this call. To |
+ // accomplish this, we continue execution until the call exits (step out). |
+ SetStepOut(); |
+ HandleSteppingRequest(stack_trace_); |
+ |
+ stack_trace_ = NULL; |
+} |
+ |
+ |
void Debugger::Initialize(Isolate* isolate) { |
if (initialized_) { |
return; |