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

Unified Diff: runtime/vm/debugger.h

Issue 9581013: Splitting debugger breakpoints into two parts (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 10 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
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/debugger.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/debugger.h
===================================================================
--- runtime/vm/debugger.h (revision 4881)
+++ runtime/vm/debugger.h (working copy)
@@ -9,36 +9,78 @@
namespace dart {
-class Breakpoint;
+class SourceBreakpoint;
+class CodeBreakpoint;
class Isolate;
class ObjectPointerVisitor;
class ActiveVariables;
-// Breakpoint represents a location in Dart source and the corresponding
-// address in compiled code.
-class Breakpoint {
+// SourceBreakpoint represents a user-specified breakpoint location in
+// Dart source. There may be more than one CodeBreakpoint object per
+// SourceBreakpoint.
+class SourceBreakpoint {
public:
- Breakpoint(const Function& func, intptr_t pc_desc_index);
+ SourceBreakpoint(const Function& func, intptr_t token_index);
RawFunction* function() const { return function_; }
+ intptr_t token_index() const { return token_index_; }
+
+ RawScript* SourceCode();
+ RawString* SourceUrl();
+ intptr_t LineNumber();
+
+ void Enable();
+ void Disable();
+ bool IsEnabled() const { return is_enabled_; }
regis 2012/03/02 17:54:53 According to our coding style, it should be is_ena
hausner 2012/03/02 18:01:19 Forward ditto.
+
+ private:
+ void VisitObjectPointers(ObjectPointerVisitor* visitor);
+
+ void set_next(SourceBreakpoint* value) { next_ = value; }
+ SourceBreakpoint* next() const { return this->next_; }
+
+ RawFunction* function_;
+ intptr_t token_index_;
+ intptr_t line_number_;
+ bool is_enabled_;
+
+ SourceBreakpoint* next_;
+
+ friend class Debugger;
+ DISALLOW_COPY_AND_ASSIGN(SourceBreakpoint);
+};
+
+
+// CodeBreakpoint represents a location in compiled code. There may be
+// more than one CodeBreakpoint for one SourceBreakpoint, e.g. when a
+// function gets compiled as a regular function and as a closure.
+class CodeBreakpoint {
+ public:
+ CodeBreakpoint(const Function& func, intptr_t pc_desc_index);
+ ~CodeBreakpoint();
+
+ RawFunction* function() const { return function_; }
uword pc() const { return pc_; }
intptr_t token_index() const { return token_index_; }
- bool is_temporary() const { return is_temporary_; }
- void set_temporary(bool value) { is_temporary_ = value; }
+ bool IsInternal() const { return src_bpt_ == NULL; }
RawScript* SourceCode();
RawString* SourceUrl();
intptr_t LineNumber();
- void SetActive(bool value);
- bool IsActive();
+ void Enable();
+ void Disable();
+ bool IsEnabled() const { return is_enabled_; }
regis 2012/03/02 17:54:53 According to our coding style, it should be is_ena
hausner 2012/03/02 18:01:19 True. I anticipate though that this function could
private:
void VisitObjectPointers(ObjectPointerVisitor* visitor);
- void set_next(Breakpoint* value) { next_ = value; }
- Breakpoint* next() const { return this->next_; }
+ SourceBreakpoint* src_bpt() const { return src_bpt_; }
+ void set_src_bpt(SourceBreakpoint* value) { src_bpt_ = value; }
+
+ void set_next(CodeBreakpoint* value) { next_ = value; }
+ CodeBreakpoint* next() const { return this->next_; }
intptr_t pc_desc_index() const { return pc_desc_index_; }
void PatchCode();
@@ -51,22 +93,24 @@
intptr_t token_index_;
uword pc_;
intptr_t line_number_;
- bool is_temporary_;
+ bool is_enabled_;
- bool is_patched_;
+ SourceBreakpoint* src_bpt_;
+ CodeBreakpoint* next_;
+
PcDescriptors::Kind breakpoint_kind_;
union {
uword target_address_;
uint8_t raw[2 * sizeof(uword)];
} saved_bytes_;
- Breakpoint* next_;
-
friend class Debugger;
- DISALLOW_COPY_AND_ASSIGN(Breakpoint);
+ DISALLOW_COPY_AND_ASSIGN(CodeBreakpoint);
};
+
+
// ActivationFrame represents one dart function activation frame
// on the call stack.
class ActivationFrame : public ZoneAllocated {
@@ -135,7 +179,7 @@
};
-typedef void BreakpointHandler(Breakpoint* bpt, StackTrace* stack);
+typedef void BreakpointHandler(SourceBreakpoint* bpt, StackTrace* stack);
class Debugger {
@@ -147,6 +191,8 @@
void Shutdown();
bool IsActive();
+ void NotifyCompilation(const Function& func);
+
void SetBreakpointHandler(BreakpointHandler* handler);
RawFunction* ResolveFunction(const Library& library,
@@ -154,13 +200,11 @@
const String& function_name);
// Set breakpoint at closest location to function entry.
- Breakpoint* SetBreakpointAtEntry(const Function& target_function,
- Error* error);
- Breakpoint* SetBreakpointAtLine(const String& script_url,
- intptr_t line_number,
- Error* error);
+ SourceBreakpoint* SetBreakpointAtEntry(const Function& target_function);
+ SourceBreakpoint* SetBreakpointAtLine(const String& script_url,
+ intptr_t line_number);
- void RemoveBreakpoint(Breakpoint* bpt);
+ void RemoveBreakpoint(SourceBreakpoint* bpt);
void SetStepOver() { resume_action_ = kStepOver; }
void SetStepInto() { resume_action_ = kStepInto; }
@@ -168,9 +212,6 @@
void VisitObjectPointers(ObjectPointerVisitor* visitor);
- // Returns NULL if no breakpoint exists for the given address.
- Breakpoint* GetBreakpoint(uword breakpoint_address);
-
// Called from Runtime when a breakpoint in Dart code is reached.
void BreakpointCallback();
@@ -195,24 +236,31 @@
};
void InstrumentForStepping(const Function &target_function);
- Breakpoint* SetBreakpoint(const Function& target_function,
- intptr_t token_index,
- Error* error);
- void UnsetBreakpoint(Breakpoint* bpt);
- void RemoveTemporaryBreakpoints();
- Breakpoint* NewBreakpoint(const Function& func, intptr_t pc_desc_index);
- void RegisterBreakpoint(Breakpoint* bpt);
- Breakpoint* GetBreakpointByFunction(const Function& func,
- intptr_t token_index);
+ SourceBreakpoint* SetBreakpoint(const Function& target_function,
+ intptr_t token_index);
+ void RemoveInternalBreakpoints();
+ void RemoveCodeBreakpoints(SourceBreakpoint* src_bpt);
+ void RegisterSourceBreakpoint(SourceBreakpoint* bpt);
+ void RegisterCodeBreakpoint(CodeBreakpoint* bpt);
+ SourceBreakpoint* GetSourceBreakpoint(const Function& func,
+ intptr_t token_index);
+ CodeBreakpoint* MakeCodeBreakpoint(SourceBreakpoint* src_bpt);
+ // Returns NULL if no breakpoint exists for the given address.
+ CodeBreakpoint* GetCodeBreakpoint(uword breakpoint_address);
+
+ void SyncBreakpoint(SourceBreakpoint* bpt);
+
Isolate* isolate_;
bool initialized_;
BreakpointHandler* bp_handler_;
- Breakpoint* breakpoints_;
+ SourceBreakpoint* src_breakpoints_;
+ CodeBreakpoint* code_breakpoints_;
// Tells debugger what to do when resuming execution after a breakpoint.
ResumeAction resume_action_;
+ friend class SourceBreakpoint;
DISALLOW_COPY_AND_ASSIGN(Debugger);
};
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/debugger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698