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

Unified Diff: runtime/vm/debugger.h

Issue 9484002: StepOver, StepInto, StepOut (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/code_patcher_x64.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 4638)
+++ runtime/vm/debugger.h (working copy)
@@ -24,11 +24,16 @@
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; }
RawScript* SourceCode();
RawString* SourceUrl();
intptr_t LineNumber();
+ void SetActive(bool value);
+ bool IsActive();
+
private:
void VisitObjectPointers(ObjectPointerVisitor* visitor);
@@ -36,12 +41,25 @@
Breakpoint* next() const { return this->next_; }
intptr_t pc_desc_index() const { return pc_desc_index_; }
+ void PatchCode();
+ void RestoreCode();
+ void PatchFunctionReturn();
+ void RestoreFunctionReturn();
+
RawFunction* function_;
intptr_t pc_desc_index_;
intptr_t token_index_;
uword pc_;
- uword saved_bytes_;
intptr_t line_number_;
+ bool is_temporary_;
+
+ bool is_patched_;
+ PcDescriptors::Kind breakpoint_kind_;
+ union {
+ uword target_address_;
+ uint8_t raw[2 * sizeof(uword)];
+ } saved_bytes_;
+
Breakpoint* next_;
friend class Debugger;
@@ -53,10 +71,11 @@
// on the call stack.
class ActivationFrame : public ZoneAllocated {
public:
- explicit ActivationFrame(uword pc, uword fp);
+ explicit ActivationFrame(uword pc, uword fp, uword sp);
uword pc() const { return pc_; }
uword fp() const { return fp_; }
+ uword sp() const { return sp_; }
const Function& DartFunction();
RawString* QualifiedFunctionName();
@@ -79,9 +98,11 @@
private:
void GetDescIndices();
RawInstance* GetLocalVarValue(intptr_t slot_index);
+ RawInstance* GetInstanceCallReceiver(intptr_t num_actual_args);
uword pc_;
uword fp_;
+ uword sp_;
Function& function_;
intptr_t token_index_;
intptr_t line_number_;
@@ -89,6 +110,7 @@
LocalVarDescriptors* var_descriptors_;
ZoneGrowableArray<intptr_t> desc_indices_;
+ friend class Debugger;
DISALLOW_COPY_AND_ASSIGN(ActivationFrame);
};
@@ -140,6 +162,10 @@
void RemoveBreakpoint(Breakpoint* bpt);
+ void SetStepOver() { resume_action_ = kStepOver; }
+ void SetStepInto() { resume_action_ = kStepInto; }
+ void SetStepOut() { resume_action_ = kStepOut; }
+
void VisitObjectPointers(ObjectPointerVisitor* visitor);
// Returns NULL if no breakpoint exists for the given address.
@@ -161,10 +187,19 @@
const String& field_name);
private:
+ enum ResumeAction {
+ kContinue,
+ kStepOver,
+ kStepInto,
+ kStepOut
+ };
+
+ 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,
@@ -174,6 +209,10 @@
bool initialized_;
BreakpointHandler* bp_handler_;
Breakpoint* breakpoints_;
+
+ // Tells debugger what to do when resuming execution after a breakpoint.
+ ResumeAction resume_action_;
+
DISALLOW_COPY_AND_ASSIGN(Debugger);
};
« no previous file with comments | « runtime/vm/code_patcher_x64.cc ('k') | runtime/vm/debugger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698