| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 #ifndef VM_DEBUGGER_H_ | 5 #ifndef VM_DEBUGGER_H_ |
| 6 #define VM_DEBUGGER_H_ | 6 #define VM_DEBUGGER_H_ |
| 7 | 7 |
| 8 #include "vm/object.h" | 8 #include "vm/object.h" |
| 9 | 9 |
| 10 namespace dart { | 10 namespace dart { |
| 11 | 11 |
| 12 class Breakpoint; | 12 class Breakpoint; |
| 13 class Isolate; | 13 class Isolate; |
| 14 class ObjectPointerVisitor; | 14 class ObjectPointerVisitor; |
| 15 class ActiveVariables; | 15 class ActiveVariables; |
| 16 | 16 |
| 17 | 17 |
| 18 // Breakpoint represents a location in Dart source and the corresponding | 18 // Breakpoint represents a location in Dart source and the corresponding |
| 19 // address in compiled code. | 19 // address in compiled code. |
| 20 class Breakpoint { | 20 class Breakpoint { |
| 21 public: | 21 public: |
| 22 Breakpoint(const Function& func, intptr_t pc_desc_index); | 22 Breakpoint(const Function& func, intptr_t pc_desc_index); |
| 23 | 23 |
| 24 RawFunction* function() const { return function_; } | 24 RawFunction* function() const { return function_; } |
| 25 uword pc() const { return pc_; } | 25 uword pc() const { return pc_; } |
| 26 intptr_t token_index() const { return token_index_; } |
| 26 | 27 |
| 27 RawScript* SourceCode(); | 28 RawScript* SourceCode(); |
| 28 RawString* SourceUrl(); | 29 RawString* SourceUrl(); |
| 29 intptr_t LineNumber(); | 30 intptr_t LineNumber(); |
| 30 | 31 |
| 31 private: | 32 private: |
| 32 void VisitObjectPointers(ObjectPointerVisitor* visitor); | 33 void VisitObjectPointers(ObjectPointerVisitor* visitor); |
| 33 | 34 |
| 34 void set_next(Breakpoint* value) { next_ = value; } | 35 void set_next(Breakpoint* value) { next_ = value; } |
| 35 Breakpoint* next() const { return this->next_; } | 36 Breakpoint* next() const { return this->next_; } |
| 37 intptr_t pc_desc_index() const { return pc_desc_index_; } |
| 36 | 38 |
| 37 RawFunction* function_; | 39 RawFunction* function_; |
| 38 intptr_t pc_desc_index_; | 40 intptr_t pc_desc_index_; |
| 39 intptr_t token_index_; | 41 intptr_t token_index_; |
| 40 uword pc_; | 42 uword pc_; |
| 43 uword saved_bytes_; |
| 41 intptr_t line_number_; | 44 intptr_t line_number_; |
| 42 Breakpoint* next_; | 45 Breakpoint* next_; |
| 43 | 46 |
| 44 friend class Debugger; | 47 friend class Debugger; |
| 45 DISALLOW_COPY_AND_ASSIGN(Breakpoint); | 48 DISALLOW_COPY_AND_ASSIGN(Breakpoint); |
| 46 }; | 49 }; |
| 47 | 50 |
| 48 | 51 |
| 49 // ActivationFrame represents one dart function activation frame | 52 // ActivationFrame represents one dart function activation frame |
| 50 // on the call stack. | 53 // on the call stack. |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 DISALLOW_COPY_AND_ASSIGN(StackTrace); | 110 DISALLOW_COPY_AND_ASSIGN(StackTrace); |
| 108 }; | 111 }; |
| 109 | 112 |
| 110 | 113 |
| 111 typedef void BreakpointHandler(Breakpoint* bpt, StackTrace* stack); | 114 typedef void BreakpointHandler(Breakpoint* bpt, StackTrace* stack); |
| 112 | 115 |
| 113 | 116 |
| 114 class Debugger { | 117 class Debugger { |
| 115 public: | 118 public: |
| 116 Debugger(); | 119 Debugger(); |
| 120 ~Debugger(); |
| 117 | 121 |
| 118 void Initialize(Isolate* isolate); | 122 void Initialize(Isolate* isolate); |
| 123 void Shutdown(); |
| 119 bool IsActive(); | 124 bool IsActive(); |
| 120 | 125 |
| 121 void SetBreakpointHandler(BreakpointHandler* handler); | 126 void SetBreakpointHandler(BreakpointHandler* handler); |
| 122 | 127 |
| 123 RawFunction* ResolveFunction(const Library& library, | 128 RawFunction* ResolveFunction(const Library& library, |
| 124 const String& class_name, | 129 const String& class_name, |
| 125 const String& function_name); | 130 const String& function_name); |
| 126 | 131 |
| 127 // Set breakpoint at closest location to function entry. | 132 // Set breakpoint at closest location to function entry. |
| 128 Breakpoint* SetBreakpointAtEntry(const Function& target_function); | 133 Breakpoint* SetBreakpointAtEntry(const Function& target_function); |
| 129 Breakpoint* SetBreakpointAtLine(const String& script_url, | 134 Breakpoint* SetBreakpointAtLine(const String& script_url, |
| 130 intptr_t line_number); | 135 intptr_t line_number); |
| 131 | 136 |
| 137 void RemoveBreakpoint(Breakpoint* bpt); |
| 138 |
| 132 void VisitObjectPointers(ObjectPointerVisitor* visitor); | 139 void VisitObjectPointers(ObjectPointerVisitor* visitor); |
| 133 | 140 |
| 134 // Returns NULL if no breakpoint exists for the given address. | 141 // Returns NULL if no breakpoint exists for the given address. |
| 135 Breakpoint* GetBreakpoint(uword breakpoint_address); | 142 Breakpoint* GetBreakpoint(uword breakpoint_address); |
| 136 | 143 |
| 137 // Called from Runtime when a breakpoint in Dart code is reached. | 144 // Called from Runtime when a breakpoint in Dart code is reached. |
| 138 void BreakpointCallback(); | 145 void BreakpointCallback(); |
| 139 | 146 |
| 140 // Utility functions. | 147 // Utility functions. |
| 141 static const char* QualifiedFunctionName(const Function& func); | 148 static const char* QualifiedFunctionName(const Function& func); |
| 142 | 149 |
| 143 private: | 150 private: |
| 144 Breakpoint* SetBreakpoint(const Function& target_function, | 151 Breakpoint* SetBreakpoint(const Function& target_function, |
| 145 intptr_t token_index); | 152 intptr_t token_index); |
| 146 void AddBreakpoint(Breakpoint* bpt); | 153 void UnsetBreakpoint(Breakpoint* bpt); |
| 154 Breakpoint* NewBreakpoint(const Function& func, intptr_t pc_desc_index); |
| 155 void RegisterBreakpoint(Breakpoint* bpt); |
| 156 Breakpoint* GetBreakpointByFunction(const Function& func, |
| 157 intptr_t token_index); |
| 147 | 158 |
| 148 bool initialized_; | 159 bool initialized_; |
| 149 BreakpointHandler* bp_handler_; | 160 BreakpointHandler* bp_handler_; |
| 150 Breakpoint* breakpoints_; | 161 Breakpoint* breakpoints_; |
| 151 DISALLOW_COPY_AND_ASSIGN(Debugger); | 162 DISALLOW_COPY_AND_ASSIGN(Debugger); |
| 152 }; | 163 }; |
| 153 | 164 |
| 154 | 165 |
| 155 } // namespace dart | 166 } // namespace dart |
| 156 | 167 |
| 157 #endif // VM_DEBUGGER_H_ | 168 #endif // VM_DEBUGGER_H_ |
| OLD | NEW |