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

Unified Diff: runtime/vm/debugger.h

Issue 2692803006: Track the 'awaiter return' call stack use it to detect uncaught exceptions in async functions (Closed)
Patch Set: rmacnak review Created 3 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
Index: runtime/vm/debugger.h
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index bf932feb31e18e883c1f587416453068f129b081..206616ab707890e430dae5ec9451db599e6ae2af 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -260,6 +260,7 @@ class ActivationFrame : public ZoneAllocated {
kRegular,
kAsyncSuspensionMarker,
kAsyncCausal,
+ kAsyncActivation,
};
ActivationFrame(uword pc,
@@ -274,6 +275,8 @@ class ActivationFrame : public ZoneAllocated {
explicit ActivationFrame(Kind kind);
+ explicit ActivationFrame(const Closure& async_activation);
+
uword pc() const { return pc_; }
uword fp() const { return fp_; }
uword sp() const { return sp_; }
@@ -332,6 +335,10 @@ class ActivationFrame : public ZoneAllocated {
// the complete script, function, and, local variable objects are included.
void PrintToJSONObject(JSONObject* jsobj, bool full = false);
+ RawObject* GetAsyncAwaiter();
+
+ bool HandlesException(const Instance& exc_obj);
+
private:
void PrintToJSONObjectRegular(JSONObject* jsobj, bool full);
void PrintToJSONObjectAsyncCausal(JSONObject* jsobj, bool full);
@@ -346,6 +353,12 @@ class ActivationFrame : public ZoneAllocated {
void GetVarDescriptors();
void GetDescIndices();
+ RawObject* GetAsyncStreamControllerStreamAwaiter(const Object& stream);
+ RawObject* GetAsyncStreamControllerStream();
+ RawObject* GetAsyncCompleterAwaiter(const Object& completer);
+ RawObject* GetAsyncCompleter();
+ void ExtractTokenPositionFromAsyncClosure();
+
static const char* KindToCString(Kind kind) {
switch (kind) {
case kRegular:
@@ -627,12 +640,14 @@ class Debugger {
void SyncBreakpointLocation(BreakpointLocation* loc);
ActivationFrame* TopDartFrame() const;
- static ActivationFrame* CollectDartFrame(Isolate* isolate,
- uword pc,
- StackFrame* frame,
- const Code& code,
- const Array& deopt_frame,
- intptr_t deopt_frame_offset);
+ static ActivationFrame* CollectDartFrame(
+ Isolate* isolate,
+ uword pc,
+ StackFrame* frame,
+ const Code& code,
+ const Array& deopt_frame,
+ intptr_t deopt_frame_offset,
+ ActivationFrame::Kind kind = ActivationFrame::kRegular);
static RawArray* DeoptimizeToArray(Thread* thread,
StackFrame* frame,
const Code& code);
@@ -648,10 +663,14 @@ class Debugger {
Array* deopt_frame);
static DebuggerStackTrace* CollectStackTrace();
static DebuggerStackTrace* CollectAsyncCausalStackTrace();
+ static DebuggerStackTrace* CollectAwaiterReturnStackTrace();
void SignalPausedEvent(ActivationFrame* top_frame, Breakpoint* bpt);
intptr_t nextId() { return next_id_++; }
+ bool ShouldPauseOnAsyncException(DebuggerStackTrace* stack_trace,
+ const Instance& exc);
+
bool ShouldPauseOnException(DebuggerStackTrace* stack_trace,
const Instance& exc);

Powered by Google App Engine
This is Rietveld 408576698