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

Unified Diff: runtime/vm/debugger.h

Issue 1145053004: Revert "Per-closure breakpoints; restructure breakpoint implementation to keep a list of conditions… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 7 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/observatory/tests/service/test_helper.dart ('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
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index 5fb456538d24cc96cd4138277a1a1d9d097ab3fe..c95deb426db4c2f621f839bd1e02c25c05f28928 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -18,74 +18,12 @@ class JSONArray;
class JSONStream;
class ObjectPointerVisitor;
class RemoteObjectCache;
-class BreakpointLocation;
+class SourceBreakpoint;
class StackFrame;
-// A user-defined breakpoint, which either fires once, for a particular closure,
-// or always. The API's notion of a breakpoint corresponds to this object.
-class Breakpoint {
- public:
- Breakpoint(intptr_t id, BreakpointLocation* bpt_location)
- : id_(id),
- kind_(Breakpoint::kNone),
- next_(NULL),
- closure_(Instance::null()),
- bpt_location_(bpt_location) {}
-
- intptr_t id() const { return id_; }
- Breakpoint* next() const { return next_; }
- void set_next(Breakpoint* n) { next_ = n; }
-
- BreakpointLocation* bpt_location() const { return bpt_location_; }
- void set_bpt_location(BreakpointLocation* new_bpt_location);
-
- bool IsRepeated() const { return kind_ == kRepeated; }
- bool IsSingleShot() const { return kind_ == kSingleShot; }
- bool IsPerClosure() const { return kind_ == kPerClosure; }
- RawInstance* closure() const { return closure_; }
-
- void SetIsRepeated() {
- ASSERT(kind_ == kNone);
- kind_ = kRepeated;
- }
-
- void SetIsSingleShot() {
- ASSERT(kind_ == kNone);
- kind_ = kSingleShot;
- }
-
- void SetIsPerClosure(const Instance& closure) {
- ASSERT(kind_ == kNone);
- kind_ = kPerClosure;
- closure_ = closure.raw();
- }
-
- void PrintJSON(JSONStream* stream);
-
- private:
- void VisitObjectPointers(ObjectPointerVisitor* visitor);
-
- enum ConditionKind {
- kNone,
- kRepeated,
- kSingleShot,
- kPerClosure,
- };
-
- intptr_t id_;
- ConditionKind kind_;
- Breakpoint* next_;
- RawInstance* closure_;
- BreakpointLocation* bpt_location_;
-
- friend class BreakpointLocation;
- DISALLOW_COPY_AND_ASSIGN(Breakpoint);
-};
-
-
-// BreakpointLocation represents a collection of breakpoint conditions at the
-// same token position in Dart source. There may be more than one CodeBreakpoint
-// object per BreakpointLocation.
+// SourceBreakpoint represents a user-specified breakpoint location in
+// Dart source. There may be more than one CodeBreakpoint object per
+// SourceBreakpoint.
// An unresolved breakpoint is one where the underlying code has not
// been compiled yet. Since the code has not been compiled, we don't know
// the definitive source location yet. The requested source location may
@@ -94,21 +32,22 @@ class Breakpoint {
// that is not loaded in the VM when the breakpoint is requested.
// When a script with matching url is loaded, a latent breakpoint
// becomes an unresolved breakpoint.
-class BreakpointLocation {
+class SourceBreakpoint {
public:
// Create a new unresolved breakpoint.
- BreakpointLocation(const Script& script,
- intptr_t token_pos,
- intptr_t end_token_pos);
+ SourceBreakpoint(intptr_t id,
+ const Script& script,
+ intptr_t token_pos,
+ intptr_t end_token_pos);
// Create a new latent breakpoint.
- BreakpointLocation(const String& url,
- intptr_t line_number);
-
- ~BreakpointLocation();
+ SourceBreakpoint(intptr_t id,
+ const String& url,
+ intptr_t line_number);
RawFunction* function() const { return function_; }
intptr_t token_pos() const { return token_pos_; }
intptr_t end_token_pos() const { return end_token_pos_; }
+ intptr_t id() const { return id_; }
RawScript* script() const { return script_; }
RawString* url() const { return url_; }
@@ -116,46 +55,45 @@ class BreakpointLocation {
void GetCodeLocation(Library* lib, Script* script, intptr_t* token_pos);
- Breakpoint* AddRepeated(Debugger* dbg);
- Breakpoint* AddSingleShot(Debugger* dbg);
- Breakpoint* AddPerClosure(Debugger* dbg, const Instance& closure);
-
- bool AnyEnabled() const;
+ void Enable();
+ void Disable();
+ bool IsEnabled() const { return is_enabled_; }
bool IsResolved() const { return is_resolved_; }
bool IsLatent() const { return token_pos_ < 0; }
+ bool IsOneShot() const { return is_one_shot_; }
+ void SetIsOneShot() { is_one_shot_ = true; }
+
+ void PrintJSON(JSONStream* stream);
+
private:
void VisitObjectPointers(ObjectPointerVisitor* visitor);
void SetResolved(const Function& func, intptr_t token_pos);
+ void set_next(SourceBreakpoint* value) { next_ = value; }
+ SourceBreakpoint* next() const { return this->next_; }
- BreakpointLocation* next() const { return this->next_; }
- void set_next(BreakpointLocation* value) { next_ = value; }
-
- void AddBreakpoint(Breakpoint* bpt, Debugger* dbg);
-
- Breakpoint* breakpoints() const { return this->conditions_; }
- void set_breakpoints(Breakpoint* head) { this->conditions_ = head; }
-
+ const intptr_t id_;
RawScript* script_;
RawString* url_;
intptr_t token_pos_;
intptr_t end_token_pos_;
bool is_resolved_;
- BreakpointLocation* next_;
- Breakpoint* conditions_;
+ bool is_enabled_;
+ bool is_one_shot_;
+ SourceBreakpoint* next_;
// Valid for resolved breakpoints:
RawFunction* function_;
intptr_t line_number_;
friend class Debugger;
- DISALLOW_COPY_AND_ASSIGN(BreakpointLocation);
+ DISALLOW_COPY_AND_ASSIGN(SourceBreakpoint);
};
// CodeBreakpoint represents a location in compiled code. There may be
-// more than one CodeBreakpoint for one BreakpointLocation, e.g. when a
+// 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:
@@ -168,7 +106,7 @@ class CodeBreakpoint {
RawFunction* function() const;
uword pc() const { return pc_; }
intptr_t token_pos() const { return token_pos_; }
- bool IsInternal() const { return bpt_location_ == NULL; }
+ bool IsInternal() const { return src_bpt_ == NULL; }
RawScript* SourceCode();
RawString* SourceUrl();
@@ -183,8 +121,8 @@ class CodeBreakpoint {
private:
void VisitObjectPointers(ObjectPointerVisitor* visitor);
- BreakpointLocation* bpt_location() const { return bpt_location_; }
- void set_bpt_location(BreakpointLocation* value) { bpt_location_ = value; }
+ 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_; }
@@ -198,7 +136,7 @@ class CodeBreakpoint {
intptr_t line_number_;
bool is_enabled_;
- BreakpointLocation* bpt_location_;
+ SourceBreakpoint* src_bpt_;
CodeBreakpoint* next_;
RawPcDescriptors::Kind breakpoint_kind_;
@@ -256,8 +194,6 @@ class ActivationFrame : public ZoneAllocated {
Object* value);
RawArray* GetLocalVariables();
- RawObject* GetParameter(intptr_t index);
- RawObject* GetClosure();
RawObject* GetReceiver();
const Context& GetSavedCurrentContext();
@@ -337,6 +273,11 @@ class DebuggerStackTrace : public ZoneAllocated {
};
+typedef void BreakpointHandler(Dart_Port isolate_id,
+ SourceBreakpoint* bpt,
+ DebuggerStackTrace* stack);
+
+
class DebuggerEvent {
public:
enum EventType {
@@ -374,11 +315,11 @@ class DebuggerEvent {
top_frame_ = frame;
}
- Breakpoint* breakpoint() const {
+ SourceBreakpoint* breakpoint() const {
ASSERT(type_ == kBreakpointReached || type_ == kBreakpointResolved);
return breakpoint_;
}
- void set_breakpoint(Breakpoint* bpt) {
+ void set_breakpoint(SourceBreakpoint* bpt) {
ASSERT(type_ == kBreakpointReached || type_ == kBreakpointResolved);
breakpoint_ = bpt;
}
@@ -400,7 +341,7 @@ class DebuggerEvent {
Isolate* isolate_;
EventType type_;
ActivationFrame* top_frame_;
- Breakpoint* breakpoint_;
+ SourceBreakpoint* breakpoint_;
const Object* exception_;
};
@@ -424,21 +365,15 @@ class Debugger {
const String& function_name);
// Set breakpoint at closest location to function entry.
- Breakpoint* SetBreakpointAtEntry(const Function& target_function,
- bool single_shot);
- Breakpoint* SetBreakpointAtActivation(const Instance& closure);
+ SourceBreakpoint* SetBreakpointAtEntry(const Function& target_function);
// TODO(turnidge): script_url may no longer be specific enough.
- Breakpoint* SetBreakpointAtLine(const String& script_url,
- intptr_t line_number);
+ SourceBreakpoint* SetBreakpointAtLine(const String& script_url,
+ intptr_t line_number);
RawError* OneTimeBreakAtEntry(const Function& target_function);
- BreakpointLocation* BreakpointLocationAtLine(const String& script_url,
- intptr_t line_number);
-
-
void RemoveBreakpoint(intptr_t bp_id);
- Breakpoint* GetBreakpointById(intptr_t id);
+ SourceBreakpoint* GetBreakpointById(intptr_t id);
void SetStepOver();
void SetSingleStep();
@@ -541,22 +476,22 @@ class Debugger {
intptr_t requested_token_pos,
intptr_t last_token_pos);
void DeoptimizeWorld();
- BreakpointLocation* SetBreakpoint(const Script& script,
- intptr_t token_pos,
- intptr_t last_token_pos);
+ SourceBreakpoint* SetBreakpoint(const Script& script,
+ intptr_t token_pos,
+ intptr_t last_token_pos);
void RemoveInternalBreakpoints();
- void UnlinkCodeBreakpoints(BreakpointLocation* bpt_location);
- BreakpointLocation* GetLatentBreakpoint(const String& url, intptr_t line);
- void RegisterBreakpointLocation(BreakpointLocation* bpt);
+ void UnlinkCodeBreakpoints(SourceBreakpoint* src_bpt);
+ SourceBreakpoint* GetLatentBreakpoint(const String& url, intptr_t line);
+ void RegisterSourceBreakpoint(SourceBreakpoint* bpt);
void RegisterCodeBreakpoint(CodeBreakpoint* bpt);
- BreakpointLocation* GetBreakpointLocation(const Script& script,
- intptr_t token_pos);
+ SourceBreakpoint* GetSourceBreakpoint(const Script& script,
+ intptr_t token_pos);
void MakeCodeBreakpointAt(const Function& func,
- BreakpointLocation* bpt);
+ SourceBreakpoint* bpt);
// Returns NULL if no breakpoint exists for the given address.
CodeBreakpoint* GetCodeBreakpoint(uword breakpoint_address);
- void SyncBreakpointLocation(BreakpointLocation* loc);
+ void SyncBreakpoint(SourceBreakpoint* bpt);
ActivationFrame* TopDartFrame() const;
static ActivationFrame* CollectDartFrame(Isolate* isolate,
@@ -569,9 +504,9 @@ class Debugger {
StackFrame* frame,
const Code& code);
static DebuggerStackTrace* CollectStackTrace();
- void SignalBpResolved(Breakpoint *bpt);
+ void SignalBpResolved(SourceBreakpoint *bpt);
void SignalPausedEvent(ActivationFrame* top_frame,
- Breakpoint* bpt);
+ SourceBreakpoint* bpt);
intptr_t nextId() { return next_id_++; }
@@ -596,8 +531,8 @@ class Debugger {
// ID number generator.
intptr_t next_id_;
- BreakpointLocation* latent_locations_;
- BreakpointLocation* breakpoint_locations_;
+ SourceBreakpoint* latent_breakpoints_;
+ SourceBreakpoint* src_breakpoints_;
CodeBreakpoint* code_breakpoints_;
// Tells debugger what to do when resuming execution after a breakpoint.
@@ -630,7 +565,7 @@ class Debugger {
static EventHandler* event_handler_;
friend class Isolate;
- friend class BreakpointLocation;
+ friend class SourceBreakpoint;
DISALLOW_COPY_AND_ASSIGN(Debugger);
};
« 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