Index: runtime/vm/debugger.cc |
=================================================================== |
--- runtime/vm/debugger.cc (revision 5243) |
+++ runtime/vm/debugger.cc (working copy) |
@@ -308,7 +308,7 @@ |
PcDescriptors& desc = PcDescriptors::Handle(code.pc_descriptors()); |
ASSERT(pc_desc_index < desc.Length()); |
token_index_ = desc.TokenIndex(pc_desc_index); |
- ASSERT(token_index_ > 0); |
+ ASSERT(token_index_ >= 0); |
pc_ = desc.PC(pc_desc_index); |
ASSERT(pc_ != 0); |
breakpoint_kind_ = desc.DescriptorKind(pc_desc_index); |
@@ -415,7 +415,8 @@ |
bp_handler_(NULL), |
src_breakpoints_(NULL), |
code_breakpoints_(NULL), |
- resume_action_(kContinue) { |
+ resume_action_(kContinue), |
+ ignore_breakpoints_(false) { |
} |
@@ -673,6 +674,8 @@ |
LongJump* base = isolate_->long_jump_base(); |
LongJump jump; |
isolate_->set_long_jump_base(&jump); |
+ bool saved_ignore_flag = ignore_breakpoints_; |
+ ignore_breakpoints_ = true; |
if (setjmp(*jump.Set()) == 0) { |
GrowableArray<const Object*> noArguments; |
const Array& noArgumentNames = Array::Handle(); |
@@ -681,6 +684,7 @@ |
} else { |
result = isolate_->object_store()->sticky_error(); |
} |
+ ignore_breakpoints_ = saved_ignore_flag; |
siva
2012/03/10 00:11:40
Why save and restore the flag instead of just sett
hausner
2012/03/10 00:41:56
I thought it's more future-proof to allow for recu
siva
2012/03/12 22:19:14
Sounds like premature optimization :-)
On 2012/03
|
isolate_->set_long_jump_base(base); |
return result.raw(); |
} |
@@ -696,6 +700,8 @@ |
LongJump* base = isolate_->long_jump_base(); |
LongJump jump; |
isolate_->set_long_jump_base(&jump); |
+ bool saved_ignore_flag = ignore_breakpoints_; |
+ ignore_breakpoints_ = true; |
if (setjmp(*jump.Set()) == 0) { |
GrowableArray<const Object*> noArguments; |
const Array& noArgumentNames = Array::Handle(); |
@@ -703,6 +709,7 @@ |
} else { |
result = isolate_->object_store()->sticky_error(); |
} |
+ ignore_breakpoints_ = saved_ignore_flag; |
isolate_->set_long_jump_base(base); |
return result.raw(); |
} |
@@ -798,6 +805,10 @@ |
void Debugger::BreakpointCallback() { |
ASSERT(initialized_); |
+ |
+ if (ignore_breakpoints_) { |
+ return; |
+ } |
DartFrameIterator iterator; |
DartFrame* frame = iterator.NextFrame(); |
ASSERT(frame != NULL); |
@@ -805,10 +816,10 @@ |
ASSERT(bpt != NULL); |
if (verbose) { |
OS::Print(">>> %s breakpoint at %s:%d (Address %p)\n", |
- bpt->IsInternal() ? "hit internal" : "hit user", |
- bpt ? String::Handle(bpt->SourceUrl()).ToCString() : "?", |
- bpt ? bpt->LineNumber() : 0, |
- frame->pc()); |
+ bpt->IsInternal() ? "hit internal" : "hit user", |
+ bpt ? String::Handle(bpt->SourceUrl()).ToCString() : "?", |
+ bpt ? bpt->LineNumber() : 0, |
+ frame->pc()); |
} |
DebuggerStackTrace* stack_trace = new DebuggerStackTrace(8); |
while (frame != NULL) { |