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

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

Issue 2782703002: Include the awaiter stack trace in the service protocol (Closed)
Patch Set: rmacnak review Created 3 years, 8 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
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 RUNTIME_VM_DEBUGGER_H_ 5 #ifndef RUNTIME_VM_DEBUGGER_H_
6 #define RUNTIME_VM_DEBUGGER_H_ 6 #define RUNTIME_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 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 RawObject* GetAsyncOperation(); 329 RawObject* GetAsyncOperation();
330 330
331 RawObject* Evaluate(const String& expr); 331 RawObject* Evaluate(const String& expr);
332 332
333 // Print the activation frame into |jsobj|. if |full| is false, script 333 // Print the activation frame into |jsobj|. if |full| is false, script
334 // and local variable objects are only references. if |full| is true, 334 // and local variable objects are only references. if |full| is true,
335 // the complete script, function, and, local variable objects are included. 335 // the complete script, function, and, local variable objects are included.
336 void PrintToJSONObject(JSONObject* jsobj, bool full = false); 336 void PrintToJSONObject(JSONObject* jsobj, bool full = false);
337 337
338 RawObject* GetAsyncAwaiter(); 338 RawObject* GetAsyncAwaiter();
339 RawObject* GetCausalStack();
339 340
340 bool HandlesException(const Instance& exc_obj); 341 bool HandlesException(const Instance& exc_obj);
341 342
342 private: 343 private:
343 void PrintToJSONObjectRegular(JSONObject* jsobj, bool full); 344 void PrintToJSONObjectRegular(JSONObject* jsobj, bool full);
344 void PrintToJSONObjectAsyncCausal(JSONObject* jsobj, bool full); 345 void PrintToJSONObjectAsyncCausal(JSONObject* jsobj, bool full);
345 void PrintToJSONObjectAsyncSuspensionMarker(JSONObject* jsobj, bool full); 346 void PrintToJSONObjectAsyncSuspensionMarker(JSONObject* jsobj, bool full);
346 347 void PrintToJSONObjectAsyncActivation(JSONObject* jsobj, bool full);
347 void PrintContextMismatchError(intptr_t ctx_slot, 348 void PrintContextMismatchError(intptr_t ctx_slot,
348 intptr_t frame_ctx_level, 349 intptr_t frame_ctx_level,
349 intptr_t var_ctx_level); 350 intptr_t var_ctx_level);
350 351
351 intptr_t TryIndex(); 352 intptr_t TryIndex();
352 void GetPcDescriptors(); 353 void GetPcDescriptors();
353 void GetVarDescriptors(); 354 void GetVarDescriptors();
354 void GetDescIndices(); 355 void GetDescIndices();
355 356
356 RawObject* GetAsyncContextVariable(const String& name); 357 RawObject* GetAsyncContextVariable(const String& name);
357 RawObject* GetAsyncStreamControllerStreamAwaiter(const Object& stream); 358 RawObject* GetAsyncStreamControllerStreamAwaiter(const Object& stream);
358 RawObject* GetAsyncStreamControllerStream(); 359 RawObject* GetAsyncStreamControllerStream();
359 RawObject* GetAsyncCompleterAwaiter(const Object& completer); 360 RawObject* GetAsyncCompleterAwaiter(const Object& completer);
360 RawObject* GetAsyncCompleter(); 361 RawObject* GetAsyncCompleter();
361 void ExtractTokenPositionFromAsyncClosure(); 362 void ExtractTokenPositionFromAsyncClosure();
362 363
363 static const char* KindToCString(Kind kind) { 364 static const char* KindToCString(Kind kind) {
364 switch (kind) { 365 switch (kind) {
365 case kRegular: 366 case kRegular:
366 return "Regular"; 367 return "Regular";
367 case kAsyncCausal: 368 case kAsyncCausal:
368 return "AsyncCausal"; 369 return "AsyncCausal";
369 case kAsyncSuspensionMarker: 370 case kAsyncSuspensionMarker:
370 return "AsyncSuspensionMarker"; 371 return "AsyncSuspensionMarker";
372 case kAsyncActivation:
373 return "AsyncActivation";
371 default: 374 default:
372 UNREACHABLE(); 375 UNREACHABLE();
373 return ""; 376 return "";
374 } 377 }
375 } 378 }
376 379
377 RawObject* GetStackVar(intptr_t slot_index); 380 RawObject* GetStackVar(intptr_t slot_index);
378 RawObject* GetContextVar(intptr_t ctxt_level, intptr_t slot_index); 381 RawObject* GetContextVar(intptr_t ctxt_level, intptr_t slot_index);
379 382
380 uword pc_; 383 uword pc_;
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 // Returns a stack trace with frames corresponding to invisible functions 537 // Returns a stack trace with frames corresponding to invisible functions
535 // omitted. CurrentStackTrace always returns a new trace on the current stack. 538 // omitted. CurrentStackTrace always returns a new trace on the current stack.
536 // The trace returned by StackTrace may have been cached; it is suitable for 539 // The trace returned by StackTrace may have been cached; it is suitable for
537 // use when stepping, but otherwise may be out of sync with the current stack. 540 // use when stepping, but otherwise may be out of sync with the current stack.
538 DebuggerStackTrace* StackTrace(); 541 DebuggerStackTrace* StackTrace();
539 DebuggerStackTrace* CurrentStackTrace(); 542 DebuggerStackTrace* CurrentStackTrace();
540 543
541 DebuggerStackTrace* AsyncCausalStackTrace(); 544 DebuggerStackTrace* AsyncCausalStackTrace();
542 DebuggerStackTrace* CurrentAsyncCausalStackTrace(); 545 DebuggerStackTrace* CurrentAsyncCausalStackTrace();
543 546
547 DebuggerStackTrace* AwaiterStackTrace();
548 DebuggerStackTrace* CurrentAwaiterStackTrace();
549
544 // Returns a debugger stack trace corresponding to a dart.core.StackTrace. 550 // Returns a debugger stack trace corresponding to a dart.core.StackTrace.
545 // Frames corresponding to invisible functions are omitted. It is not valid 551 // Frames corresponding to invisible functions are omitted. It is not valid
546 // to query local variables in the returned stack. 552 // to query local variables in the returned stack.
547 DebuggerStackTrace* StackTraceFrom(const class StackTrace& dart_stacktrace); 553 DebuggerStackTrace* StackTraceFrom(const class StackTrace& dart_stacktrace);
548 554
549 RawArray* GetInstanceFields(const Instance& obj); 555 RawArray* GetInstanceFields(const Instance& obj);
550 RawArray* GetStaticFields(const Class& cls); 556 RawArray* GetStaticFields(const Class& cls);
551 RawArray* GetLibraryFields(const Library& lib); 557 RawArray* GetLibraryFields(const Library& lib);
552 RawArray* GetGlobalFields(const Library& lib); 558 RawArray* GetGlobalFields(const Library& lib);
553 559
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 bool include_private_fields); 692 bool include_private_fields);
687 693
688 // Handles any events which pause vm execution. Breakpoints, 694 // Handles any events which pause vm execution. Breakpoints,
689 // interrupts, etc. 695 // interrupts, etc.
690 void Pause(ServiceEvent* event); 696 void Pause(ServiceEvent* event);
691 697
692 void HandleSteppingRequest(DebuggerStackTrace* stack_trace, 698 void HandleSteppingRequest(DebuggerStackTrace* stack_trace,
693 bool skip_next_step = false); 699 bool skip_next_step = false);
694 700
695 void CacheStackTraces(DebuggerStackTrace* stack_trace, 701 void CacheStackTraces(DebuggerStackTrace* stack_trace,
696 DebuggerStackTrace* async_causal_stack_trace); 702 DebuggerStackTrace* async_causal_stack_trace,
703 DebuggerStackTrace* awaiter_stack_trace);
697 void ClearCachedStackTraces(); 704 void ClearCachedStackTraces();
698 705
699 706
700 // Can we rewind to the indicated frame? 707 // Can we rewind to the indicated frame?
701 bool CanRewindFrame(intptr_t frame_index, const char** error) const; 708 bool CanRewindFrame(intptr_t frame_index, const char** error) const;
702 709
703 void RewindToFrame(intptr_t frame_index); 710 void RewindToFrame(intptr_t frame_index);
704 void RewindToUnoptimizedFrame(StackFrame* frame, const Code& code); 711 void RewindToUnoptimizedFrame(StackFrame* frame, const Code& code);
705 void RewindToOptimizedFrame(StackFrame* frame, 712 void RewindToOptimizedFrame(StackFrame* frame,
706 const Code& code, 713 const Code& code,
(...skipping 25 matching lines...) Expand all
732 // paused for breakpoints, isolate interruption, and (sometimes) 739 // paused for breakpoints, isolate interruption, and (sometimes)
733 // exceptions. 740 // exceptions.
734 ServiceEvent* pause_event_; 741 ServiceEvent* pause_event_;
735 742
736 // An id -> object map. Valid only while IsPaused(). 743 // An id -> object map. Valid only while IsPaused().
737 RemoteObjectCache* obj_cache_; 744 RemoteObjectCache* obj_cache_;
738 745
739 // Current stack trace. Valid only while IsPaused(). 746 // Current stack trace. Valid only while IsPaused().
740 DebuggerStackTrace* stack_trace_; 747 DebuggerStackTrace* stack_trace_;
741 DebuggerStackTrace* async_causal_stack_trace_; 748 DebuggerStackTrace* async_causal_stack_trace_;
749 DebuggerStackTrace* awaiter_stack_trace_;
742 750
743 // When stepping through code, only pause the program if the top 751 // When stepping through code, only pause the program if the top
744 // frame corresponds to this fp value, or if the top frame is 752 // frame corresponds to this fp value, or if the top frame is
745 // lower on the stack. 753 // lower on the stack.
746 uword stepping_fp_; 754 uword stepping_fp_;
747 755
748 // If we step while at a breakpoint, we would hit the same pc twice. 756 // If we step while at a breakpoint, we would hit the same pc twice.
749 // We use this field to let us skip the next single-step after a 757 // We use this field to let us skip the next single-step after a
750 // breakpoint. 758 // breakpoint.
751 bool skip_next_step_; 759 bool skip_next_step_;
(...skipping 11 matching lines...) Expand all
763 771
764 friend class Isolate; 772 friend class Isolate;
765 friend class BreakpointLocation; 773 friend class BreakpointLocation;
766 DISALLOW_COPY_AND_ASSIGN(Debugger); 774 DISALLOW_COPY_AND_ASSIGN(Debugger);
767 }; 775 };
768 776
769 777
770 } // namespace dart 778 } // namespace dart
771 779
772 #endif // RUNTIME_VM_DEBUGGER_H_ 780 #endif // RUNTIME_VM_DEBUGGER_H_
OLDNEW
« no previous file with comments | « runtime/observatory/tests/service/awaiter_async_stack_contents_test.dart ('k') | runtime/vm/debugger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698