| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "vm/debugger.h" | 5 #include "vm/debugger.h" | 
| 6 | 6 | 
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" | 
| 8 | 8 | 
| 9 #include "vm/code_generator.h" | 9 #include "vm/code_generator.h" | 
| 10 #include "vm/code_patcher.h" | 10 #include "vm/code_patcher.h" | 
| (...skipping 2595 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2606     } | 2606     } | 
| 2607   } | 2607   } | 
| 2608 } | 2608 } | 
| 2609 | 2609 | 
| 2610 | 2610 | 
| 2611 // static | 2611 // static | 
| 2612 bool Debugger::IsDebuggable(const Function& func) { | 2612 bool Debugger::IsDebuggable(const Function& func) { | 
| 2613   if (!func.is_debuggable()) { | 2613   if (!func.is_debuggable()) { | 
| 2614     return false; | 2614     return false; | 
| 2615   } | 2615   } | 
| 2616   if (ServiceIsolate::IsRunning()) { |  | 
| 2617     return true; |  | 
| 2618   } |  | 
| 2619   const Class& cls = Class::Handle(func.Owner()); | 2616   const Class& cls = Class::Handle(func.Owner()); | 
| 2620   const Library& lib = Library::Handle(cls.library()); | 2617   const Library& lib = Library::Handle(cls.library()); | 
| 2621   return lib.IsDebuggable(); | 2618   return lib.IsDebuggable(); | 
| 2622 } | 2619 } | 
| 2623 | 2620 | 
| 2624 | 2621 | 
| 2625 void Debugger::SignalPausedEvent(ActivationFrame* top_frame, | 2622 void Debugger::SignalPausedEvent(ActivationFrame* top_frame, | 
| 2626                                  Breakpoint* bpt) { | 2623                                  Breakpoint* bpt) { | 
| 2627   resume_action_ = kContinue; | 2624   resume_action_ = kContinue; | 
| 2628   stepping_fp_ = 0; | 2625   stepping_fp_ = 0; | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2677   // the user is interested in, we ignore the single step if we are | 2674   // the user is interested in, we ignore the single step if we are | 
| 2678   // in a callee of that frame. Note that we assume that the stack | 2675   // in a callee of that frame. Note that we assume that the stack | 
| 2679   // grows towards lower addresses. | 2676   // grows towards lower addresses. | 
| 2680   ActivationFrame* frame = TopDartFrame(); | 2677   ActivationFrame* frame = TopDartFrame(); | 
| 2681   ASSERT(frame != NULL); | 2678   ASSERT(frame != NULL); | 
| 2682 | 2679 | 
| 2683   if (stepping_fp_ != 0) { | 2680   if (stepping_fp_ != 0) { | 
| 2684     // There is an "interesting frame" set. Only pause at appropriate | 2681     // There is an "interesting frame" set. Only pause at appropriate | 
| 2685     // locations in this frame. | 2682     // locations in this frame. | 
| 2686     if (IsCalleeFrameOf(stepping_fp_, frame->fp())) { | 2683     if (IsCalleeFrameOf(stepping_fp_, frame->fp())) { | 
| 2687       // We are i n a callee of the frame we're interested in. | 2684       // We are in a callee of the frame we're interested in. | 
| 2688       // Ignore this stepping break. | 2685       // Ignore this stepping break. | 
| 2689       return Error::null(); | 2686       return Error::null(); | 
| 2690     } else if (IsCalleeFrameOf(frame->fp(), stepping_fp_)) { | 2687     } else if (IsCalleeFrameOf(frame->fp(), stepping_fp_)) { | 
| 2691       // We returned from the "interesting frame", there can be no more | 2688       // We returned from the "interesting frame", there can be no more | 
| 2692       // stepping breaks for it. Pause at the next appropriate location | 2689       // stepping breaks for it. Pause at the next appropriate location | 
| 2693       // and let the user set the "interesting" frame again. | 2690       // and let the user set the "interesting" frame again. | 
| 2694       stepping_fp_ = 0; | 2691       stepping_fp_ = 0; | 
| 2695     } | 2692     } | 
| 2696   } | 2693   } | 
| 2697 | 2694 | 
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2856 | 2853 | 
| 2857 | 2854 | 
| 2858 void Debugger::PauseDeveloper(const String& msg) { | 2855 void Debugger::PauseDeveloper(const String& msg) { | 
| 2859   // We ignore this breakpoint when the VM is executing code invoked | 2856   // We ignore this breakpoint when the VM is executing code invoked | 
| 2860   // by the debugger to evaluate variables values, or when we see a nested | 2857   // by the debugger to evaluate variables values, or when we see a nested | 
| 2861   // breakpoint or exception event. | 2858   // breakpoint or exception event. | 
| 2862   if (ignore_breakpoints_ || IsPaused()) { | 2859   if (ignore_breakpoints_ || IsPaused()) { | 
| 2863     return; | 2860     return; | 
| 2864   } | 2861   } | 
| 2865 | 2862 | 
| 2866   if (!NeedsDebugEvents()) { |  | 
| 2867     OS::Print("Hit debugger!"); |  | 
| 2868   } |  | 
| 2869 |  | 
| 2870   DebuggerStackTrace* stack_trace = CollectStackTrace(); | 2863   DebuggerStackTrace* stack_trace = CollectStackTrace(); | 
| 2871   ASSERT(stack_trace->Length() > 0); | 2864   ASSERT(stack_trace->Length() > 0); | 
| 2872   ASSERT(stack_trace_ == NULL); | 2865   ASSERT(stack_trace_ == NULL); | 
| 2873   stack_trace_ = stack_trace; | 2866   stack_trace_ = stack_trace; | 
| 2874 | 2867 | 
| 2875   // TODO(johnmccutchan): Send |msg| to Observatory. | 2868   // TODO(johnmccutchan): Send |msg| to Observatory. | 
| 2876 | 2869 | 
| 2877   // We are in the native call to Developer_debugger.  the developer | 2870   // We are in the native call to Developer_debugger.  the developer | 
| 2878   // gets a better experience by not seeing this call. To accomplish | 2871   // gets a better experience by not seeing this call. To accomplish | 
| 2879   // this, we continue execution until the call exits (step out). | 2872   // this, we continue execution until the call exits (step out). | 
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3332 | 3325 | 
| 3333 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { | 3326 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { | 
| 3334   ASSERT(bpt->next() == NULL); | 3327   ASSERT(bpt->next() == NULL); | 
| 3335   bpt->set_next(code_breakpoints_); | 3328   bpt->set_next(code_breakpoints_); | 
| 3336   code_breakpoints_ = bpt; | 3329   code_breakpoints_ = bpt; | 
| 3337 } | 3330 } | 
| 3338 | 3331 | 
| 3339 #endif  // !PRODUCT | 3332 #endif  // !PRODUCT | 
| 3340 | 3333 | 
| 3341 }  // namespace dart | 3334 }  // namespace dart | 
| OLD | NEW | 
|---|