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

Side by Side Diff: runtime/vm/debugger.h

Issue 1312763010: Support column-based breakpoints in the VM and Observatory. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: hausner review Created 5 years, 3 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 unified diff | Download patch
« no previous file with comments | « runtime/observatory/tests/service/test_helper.dart ('k') | runtime/vm/debugger.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef VM_DEBUGGER_H_ 5 #ifndef VM_DEBUGGER_H_
6 #define VM_DEBUGGER_H_ 6 #define VM_DEBUGGER_H_
7 7
8 #include "include/dart_tools_api.h" 8 #include "include/dart_tools_api.h"
9 9
10 #include "vm/object.h" 10 #include "vm/object.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 // change when the underlying code gets compiled. 92 // change when the underlying code gets compiled.
93 // A latent breakpoint represents a breakpoint location in Dart source 93 // A latent breakpoint represents a breakpoint location in Dart source
94 // that is not loaded in the VM when the breakpoint is requested. 94 // that is not loaded in the VM when the breakpoint is requested.
95 // When a script with matching url is loaded, a latent breakpoint 95 // When a script with matching url is loaded, a latent breakpoint
96 // becomes an unresolved breakpoint. 96 // becomes an unresolved breakpoint.
97 class BreakpointLocation { 97 class BreakpointLocation {
98 public: 98 public:
99 // Create a new unresolved breakpoint. 99 // Create a new unresolved breakpoint.
100 BreakpointLocation(const Script& script, 100 BreakpointLocation(const Script& script,
101 intptr_t token_pos, 101 intptr_t token_pos,
102 intptr_t end_token_pos); 102 intptr_t end_token_pos,
103 intptr_t requested_line_number,
104 intptr_t requested_column_number);
103 // Create a new latent breakpoint. 105 // Create a new latent breakpoint.
104 BreakpointLocation(const String& url, 106 BreakpointLocation(const String& url,
105 intptr_t line_number); 107 intptr_t requested_line_number,
108 intptr_t requested_column_number);
106 109
107 ~BreakpointLocation(); 110 ~BreakpointLocation();
108 111
109 RawFunction* function() const { return function_; } 112 RawFunction* function() const { return function_; }
110 intptr_t token_pos() const { return token_pos_; } 113 intptr_t token_pos() const { return token_pos_; }
111 intptr_t end_token_pos() const { return end_token_pos_; } 114 intptr_t end_token_pos() const { return end_token_pos_; }
112 115
113 RawScript* script() const { return script_; } 116 RawScript* script() const { return script_; }
114 RawString* url() const { return url_; } 117 RawString* url() const { return url_; }
118
119 intptr_t requested_line_number() const { return requested_line_number_; }
120 intptr_t requested_column_number() const { return requested_column_number_; }
121
115 intptr_t LineNumber(); 122 intptr_t LineNumber();
123 intptr_t ColumnNumber();
116 124
117 void GetCodeLocation(Library* lib, Script* script, intptr_t* token_pos); 125 void GetCodeLocation(Library* lib,
126 Script* script,
127 intptr_t* token_pos) const;
118 128
119 Breakpoint* AddRepeated(Debugger* dbg); 129 Breakpoint* AddRepeated(Debugger* dbg);
120 Breakpoint* AddSingleShot(Debugger* dbg); 130 Breakpoint* AddSingleShot(Debugger* dbg);
121 Breakpoint* AddPerClosure(Debugger* dbg, const Instance& closure); 131 Breakpoint* AddPerClosure(Debugger* dbg, const Instance& closure);
122 132
123 bool AnyEnabled() const; 133 bool AnyEnabled() const;
124 bool IsResolved() const { return is_resolved_; } 134 bool IsResolved() const { return is_resolved_; }
125 bool IsLatent() const { return token_pos_ < 0; } 135 bool IsLatent() const { return token_pos_ < 0; }
126 136
127 private: 137 private:
128 void VisitObjectPointers(ObjectPointerVisitor* visitor); 138 void VisitObjectPointers(ObjectPointerVisitor* visitor);
129 139
130 void SetResolved(const Function& func, intptr_t token_pos); 140 void SetResolved(const Function& func, intptr_t token_pos);
131 141
132 BreakpointLocation* next() const { return this->next_; } 142 BreakpointLocation* next() const { return this->next_; }
133 void set_next(BreakpointLocation* value) { next_ = value; } 143 void set_next(BreakpointLocation* value) { next_ = value; }
134 144
135 void AddBreakpoint(Breakpoint* bpt, Debugger* dbg); 145 void AddBreakpoint(Breakpoint* bpt, Debugger* dbg);
136 146
137 Breakpoint* breakpoints() const { return this->conditions_; } 147 Breakpoint* breakpoints() const { return this->conditions_; }
138 void set_breakpoints(Breakpoint* head) { this->conditions_ = head; } 148 void set_breakpoints(Breakpoint* head) { this->conditions_ = head; }
139 149
140 RawScript* script_; 150 RawScript* script_;
141 RawString* url_; 151 RawString* url_;
142 intptr_t token_pos_; 152 intptr_t token_pos_;
143 intptr_t end_token_pos_; 153 intptr_t end_token_pos_;
144 bool is_resolved_; 154 bool is_resolved_;
145 BreakpointLocation* next_; 155 BreakpointLocation* next_;
146 Breakpoint* conditions_; 156 Breakpoint* conditions_;
157 intptr_t requested_line_number_;
158 intptr_t requested_column_number_;
147 159
148 // Valid for resolved breakpoints: 160 // Valid for resolved breakpoints:
149 RawFunction* function_; 161 RawFunction* function_;
150 intptr_t line_number_; 162 intptr_t line_number_;
163 intptr_t column_number_;
151 164
152 friend class Debugger; 165 friend class Debugger;
153 DISALLOW_COPY_AND_ASSIGN(BreakpointLocation); 166 DISALLOW_COPY_AND_ASSIGN(BreakpointLocation);
154 }; 167 };
155 168
156 169
157 // CodeBreakpoint represents a location in compiled code. There may be 170 // CodeBreakpoint represents a location in compiled code. There may be
158 // more than one CodeBreakpoint for one BreakpointLocation, e.g. when a 171 // more than one CodeBreakpoint for one BreakpointLocation, e.g. when a
159 // function gets compiled as a regular function and as a closure. 172 // function gets compiled as a regular function and as a closure.
160 class CodeBreakpoint { 173 class CodeBreakpoint {
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 466
454 // Set breakpoint at closest location to function entry. 467 // Set breakpoint at closest location to function entry.
455 Breakpoint* SetBreakpointAtEntry(const Function& target_function, 468 Breakpoint* SetBreakpointAtEntry(const Function& target_function,
456 bool single_shot); 469 bool single_shot);
457 Breakpoint* SetBreakpointAtActivation(const Instance& closure); 470 Breakpoint* SetBreakpointAtActivation(const Instance& closure);
458 Breakpoint* BreakpointAtActivation(const Instance& closure); 471 Breakpoint* BreakpointAtActivation(const Instance& closure);
459 472
460 // TODO(turnidge): script_url may no longer be specific enough. 473 // TODO(turnidge): script_url may no longer be specific enough.
461 Breakpoint* SetBreakpointAtLine(const String& script_url, 474 Breakpoint* SetBreakpointAtLine(const String& script_url,
462 intptr_t line_number); 475 intptr_t line_number);
476 Breakpoint* SetBreakpointAtLineCol(const String& script_url,
477 intptr_t line_number,
478 intptr_t column_number);
463 RawError* OneTimeBreakAtEntry(const Function& target_function); 479 RawError* OneTimeBreakAtEntry(const Function& target_function);
464 480
465 BreakpointLocation* BreakpointLocationAtLine(const String& script_url, 481 BreakpointLocation* BreakpointLocationAtLineCol(const String& script_url,
466 intptr_t line_number); 482 intptr_t line_number,
483 intptr_t column_number);
467 484
468 485
469 void RemoveBreakpoint(intptr_t bp_id); 486 void RemoveBreakpoint(intptr_t bp_id);
470 Breakpoint* GetBreakpointById(intptr_t id); 487 Breakpoint* GetBreakpointById(intptr_t id);
471 488
472 void SetStepOver(); 489 void SetStepOver();
473 void SetSingleStep(); 490 void SetSingleStep();
474 void SetStepOut(); 491 void SetStepOut();
475 bool IsStepping() const { return resume_action_ != kContinue; } 492 bool IsStepping() const { return resume_action_ != kContinue; }
476 493
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 585
569 void FindCompiledFunctions(const Script& script, 586 void FindCompiledFunctions(const Script& script,
570 intptr_t start_pos, 587 intptr_t start_pos,
571 intptr_t end_pos, 588 intptr_t end_pos,
572 GrowableObjectArray* function_list); 589 GrowableObjectArray* function_list);
573 RawFunction* FindBestFit(const Script& script, intptr_t token_pos); 590 RawFunction* FindBestFit(const Script& script, intptr_t token_pos);
574 RawFunction* FindInnermostClosure(const Function& function, 591 RawFunction* FindInnermostClosure(const Function& function,
575 intptr_t token_pos); 592 intptr_t token_pos);
576 intptr_t ResolveBreakpointPos(const Function& func, 593 intptr_t ResolveBreakpointPos(const Function& func,
577 intptr_t requested_token_pos, 594 intptr_t requested_token_pos,
578 intptr_t last_token_pos); 595 intptr_t last_token_pos,
596 intptr_t requested_column);
579 void DeoptimizeWorld(); 597 void DeoptimizeWorld();
580 BreakpointLocation* SetBreakpoint(const Script& script, 598 BreakpointLocation* SetBreakpoint(const Script& script,
581 intptr_t token_pos, 599 intptr_t token_pos,
582 intptr_t last_token_pos); 600 intptr_t last_token_pos,
601 intptr_t requested_line,
602 intptr_t requested_column);
583 void RemoveInternalBreakpoints(); 603 void RemoveInternalBreakpoints();
584 void UnlinkCodeBreakpoints(BreakpointLocation* bpt_location); 604 void UnlinkCodeBreakpoints(BreakpointLocation* bpt_location);
585 BreakpointLocation* GetLatentBreakpoint(const String& url, intptr_t line); 605 BreakpointLocation* GetLatentBreakpoint(const String& url,
606 intptr_t line,
607 intptr_t column);
586 void RegisterBreakpointLocation(BreakpointLocation* bpt); 608 void RegisterBreakpointLocation(BreakpointLocation* bpt);
587 void RegisterCodeBreakpoint(CodeBreakpoint* bpt); 609 void RegisterCodeBreakpoint(CodeBreakpoint* bpt);
588 BreakpointLocation* GetBreakpointLocation(const Script& script, 610 BreakpointLocation* GetBreakpointLocation(const Script& script,
589 intptr_t token_pos); 611 intptr_t token_pos,
612 intptr_t requested_column);
590 void MakeCodeBreakpointAt(const Function& func, 613 void MakeCodeBreakpointAt(const Function& func,
591 BreakpointLocation* bpt); 614 BreakpointLocation* bpt);
592 // Returns NULL if no breakpoint exists for the given address. 615 // Returns NULL if no breakpoint exists for the given address.
593 CodeBreakpoint* GetCodeBreakpoint(uword breakpoint_address); 616 CodeBreakpoint* GetCodeBreakpoint(uword breakpoint_address);
594 617
595 void SyncBreakpointLocation(BreakpointLocation* loc); 618 void SyncBreakpointLocation(BreakpointLocation* loc);
596 619
597 ActivationFrame* TopDartFrame() const; 620 ActivationFrame* TopDartFrame() const;
598 static ActivationFrame* CollectDartFrame(Isolate* isolate, 621 static ActivationFrame* CollectDartFrame(Isolate* isolate,
599 uword pc, 622 uword pc,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 690
668 friend class Isolate; 691 friend class Isolate;
669 friend class BreakpointLocation; 692 friend class BreakpointLocation;
670 DISALLOW_COPY_AND_ASSIGN(Debugger); 693 DISALLOW_COPY_AND_ASSIGN(Debugger);
671 }; 694 };
672 695
673 696
674 } // namespace dart 697 } // namespace dart
675 698
676 #endif // VM_DEBUGGER_H_ 699 #endif // VM_DEBUGGER_H_
OLDNEW
« no previous file with comments | « runtime/observatory/tests/service/test_helper.dart ('k') | runtime/vm/debugger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698