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

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

Issue 2521413002: Revert "Implement rewind: drop one or more frames from the debugger." (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « runtime/vm/dart_entry.cc ('k') | runtime/vm/debugger.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 RawScript* SourceScript(); 269 RawScript* SourceScript();
270 RawLibrary* Library(); 270 RawLibrary* Library();
271 TokenPosition TokenPos(); 271 TokenPosition TokenPos();
272 intptr_t LineNumber(); 272 intptr_t LineNumber();
273 intptr_t ColumnNumber(); 273 intptr_t ColumnNumber();
274 274
275 // Returns true if this frame is for a function that is visible 275 // Returns true if this frame is for a function that is visible
276 // to the user and can be debugged. 276 // to the user and can be debugged.
277 bool IsDebuggable() const; 277 bool IsDebuggable() const;
278 278
279 // Returns true if it is possible to rewind the debugger to this frame.
280 bool IsRewindable() const;
281
282 // The context level of a frame is the context level at the 279 // The context level of a frame is the context level at the
283 // PC/token index of the frame. It determines the depth of the context 280 // PC/token index of the frame. It determines the depth of the context
284 // chain that belongs to the function of this activation frame. 281 // chain that belongs to the function of this activation frame.
285 intptr_t ContextLevel(); 282 intptr_t ContextLevel();
286 283
287 const char* ToCString(); 284 const char* ToCString();
288 285
289 intptr_t NumLocalVariables(); 286 intptr_t NumLocalVariables();
290 287
291 void VariableAt(intptr_t i, 288 void VariableAt(intptr_t i,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 void AddActivation(ActivationFrame* frame); 366 void AddActivation(ActivationFrame* frame);
370 ZoneGrowableArray<ActivationFrame*> trace_; 367 ZoneGrowableArray<ActivationFrame*> trace_;
371 368
372 friend class Debugger; 369 friend class Debugger;
373 DISALLOW_COPY_AND_ASSIGN(DebuggerStackTrace); 370 DISALLOW_COPY_AND_ASSIGN(DebuggerStackTrace);
374 }; 371 };
375 372
376 373
377 class Debugger { 374 class Debugger {
378 public: 375 public:
379 enum ResumeAction {
380 kContinue,
381 kStepInto,
382 kStepOver,
383 kStepOut,
384 kStepRewind,
385 kStepOverAsyncSuspension,
386 };
387
388 typedef void EventHandler(ServiceEvent* event); 376 typedef void EventHandler(ServiceEvent* event);
389 377
390 Debugger(); 378 Debugger();
391 ~Debugger(); 379 ~Debugger();
392 380
393 void Initialize(Isolate* isolate); 381 void Initialize(Isolate* isolate);
394 void NotifyIsolateCreated(); 382 void NotifyIsolateCreated();
395 void Shutdown(); 383 void Shutdown();
396 384
397 void NotifyCompilation(const Function& func); 385 void NotifyCompilation(const Function& func);
(...skipping 19 matching lines...) Expand all
417 RawError* OneTimeBreakAtEntry(const Function& target_function); 405 RawError* OneTimeBreakAtEntry(const Function& target_function);
418 406
419 BreakpointLocation* BreakpointLocationAtLineCol(const String& script_url, 407 BreakpointLocation* BreakpointLocationAtLineCol(const String& script_url,
420 intptr_t line_number, 408 intptr_t line_number,
421 intptr_t column_number); 409 intptr_t column_number);
422 410
423 411
424 void RemoveBreakpoint(intptr_t bp_id); 412 void RemoveBreakpoint(intptr_t bp_id);
425 Breakpoint* GetBreakpointById(intptr_t id); 413 Breakpoint* GetBreakpointById(intptr_t id);
426 414
427 bool SetResumeAction(ResumeAction action, 415 // Will return false if we are not at an await.
428 intptr_t frame_index = 1, 416 bool SetupStepOverAsyncSuspension();
429 const char** error = NULL); 417 void SetStepOver();
430 418 void SetSingleStep();
419 void SetStepOut();
431 bool IsStepping() const { return resume_action_ != kContinue; } 420 bool IsStepping() const { return resume_action_ != kContinue; }
432 421
433 bool IsPaused() const { return pause_event_ != NULL; } 422 bool IsPaused() const { return pause_event_ != NULL; }
434 423
435 // Put the isolate into single stepping mode when Dart code next runs. 424 // Put the isolate into single stepping mode when Dart code next runs.
436 // 425 //
437 // This is used by the vm service to allow the user to step while 426 // This is used by the vm service to allow the user to step while
438 // paused at isolate start. 427 // paused at isolate start.
439 void EnterSingleStepMode(); 428 void EnterSingleStepMode();
440 429
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 506
518 RawCode* GetPatchedStubAddress(uword breakpoint_address); 507 RawCode* GetPatchedStubAddress(uword breakpoint_address);
519 508
520 void PrintBreakpointsToJSONArray(JSONArray* jsarr) const; 509 void PrintBreakpointsToJSONArray(JSONArray* jsarr) const;
521 void PrintSettingsToJSONObject(JSONObject* jsobj) const; 510 void PrintSettingsToJSONObject(JSONObject* jsobj) const;
522 511
523 static bool IsDebuggable(const Function& func); 512 static bool IsDebuggable(const Function& func);
524 513
525 intptr_t limitBreakpointId() { return next_id_; } 514 intptr_t limitBreakpointId() { return next_id_; }
526 515
527 // Callback to the debugger to continue frame rewind, post-deoptimization. 516 private:
528 void RewindPostDeopt(); 517 enum ResumeAction { kContinue, kStepOver, kStepOut, kSingleStep };
529 518
530 private:
531 RawError* PauseRequest(ServiceEvent::EventKind kind); 519 RawError* PauseRequest(ServiceEvent::EventKind kind);
532 520
533 // Will return false if we are not at an await.
534 bool SetupStepOverAsyncSuspension(const char** error);
535
536 bool NeedsIsolateEvents(); 521 bool NeedsIsolateEvents();
537 bool NeedsDebugEvents(); 522 bool NeedsDebugEvents();
538 void InvokeEventHandler(ServiceEvent* event); 523 void InvokeEventHandler(ServiceEvent* event);
539 524
540 void SendBreakpointEvent(ServiceEvent::EventKind kind, Breakpoint* bpt); 525 void SendBreakpointEvent(ServiceEvent::EventKind kind, Breakpoint* bpt);
541 526
542 bool IsAtAsyncJump(ActivationFrame* top_frame); 527 bool IsAtAsyncJump(ActivationFrame* top_frame);
543 void FindCompiledFunctions(const Script& script, 528 void FindCompiledFunctions(const Script& script,
544 TokenPosition start_pos, 529 TokenPosition start_pos,
545 TokenPosition end_pos, 530 TokenPosition end_pos,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 const String& prefix, 581 const String& prefix,
597 bool include_private_fields); 582 bool include_private_fields);
598 583
599 // Handles any events which pause vm execution. Breakpoints, 584 // Handles any events which pause vm execution. Breakpoints,
600 // interrupts, etc. 585 // interrupts, etc.
601 void Pause(ServiceEvent* event); 586 void Pause(ServiceEvent* event);
602 587
603 void HandleSteppingRequest(DebuggerStackTrace* stack_trace, 588 void HandleSteppingRequest(DebuggerStackTrace* stack_trace,
604 bool skip_next_step = false); 589 bool skip_next_step = false);
605 590
606 // Can we rewind to the indicated frame?
607 bool CanRewindFrame(intptr_t frame_index, const char** error) const;
608
609 void RewindToFrame(intptr_t frame_index);
610 void RewindToUnoptimizedFrame(StackFrame* frame, const Code& code);
611 void RewindToOptimizedFrame(StackFrame* frame,
612 const Code& code,
613 intptr_t post_deopt_frame_index);
614
615 Isolate* isolate_; 591 Isolate* isolate_;
616 Dart_Port isolate_id_; // A unique ID for the isolate in the debugger. 592 Dart_Port isolate_id_; // A unique ID for the isolate in the debugger.
617 bool initialized_; 593 bool initialized_;
618 594
619 // ID number generator. 595 // ID number generator.
620 intptr_t next_id_; 596 intptr_t next_id_;
621 597
622 BreakpointLocation* latent_locations_; 598 BreakpointLocation* latent_locations_;
623 BreakpointLocation* breakpoint_locations_; 599 BreakpointLocation* breakpoint_locations_;
624 CodeBreakpoint* code_breakpoints_; 600 CodeBreakpoint* code_breakpoints_;
625 601
626 // Tells debugger what to do when resuming execution after a breakpoint. 602 // Tells debugger what to do when resuming execution after a breakpoint.
627 ResumeAction resume_action_; 603 ResumeAction resume_action_;
628 intptr_t resume_frame_index_;
629 intptr_t post_deopt_frame_index_;
630 604
631 // Do not call back to breakpoint handler if this flag is set. 605 // Do not call back to breakpoint handler if this flag is set.
632 // Effectively this means ignoring breakpoints. Set when Dart code may 606 // Effectively this means ignoring breakpoints. Set when Dart code may
633 // be run as a side effect of getting values of fields. 607 // be run as a side effect of getting values of fields.
634 bool ignore_breakpoints_; 608 bool ignore_breakpoints_;
635 609
636 // Indicates why the debugger is currently paused. If the debugger 610 // Indicates why the debugger is currently paused. If the debugger
637 // is not paused, this is NULL. Note that the debugger can be 611 // is not paused, this is NULL. Note that the debugger can be
638 // paused for breakpoints, isolate interruption, and (sometimes) 612 // paused for breakpoints, isolate interruption, and (sometimes)
639 // exceptions. 613 // exceptions.
(...skipping 26 matching lines...) Expand all
666 640
667 friend class Isolate; 641 friend class Isolate;
668 friend class BreakpointLocation; 642 friend class BreakpointLocation;
669 DISALLOW_COPY_AND_ASSIGN(Debugger); 643 DISALLOW_COPY_AND_ASSIGN(Debugger);
670 }; 644 };
671 645
672 646
673 } // namespace dart 647 } // namespace dart
674 648
675 #endif // RUNTIME_VM_DEBUGGER_H_ 649 #endif // RUNTIME_VM_DEBUGGER_H_
OLDNEW
« no previous file with comments | « runtime/vm/dart_entry.cc ('k') | runtime/vm/debugger.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698