Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(895)

Unified Diff: runtime/vm/debugger.cc

Issue 9668036: Teach debugger to ignore breakpoints (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698