| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_DEBUG_H_ | 5 #ifndef V8_DEBUG_H_ |
| 6 #define V8_DEBUG_H_ | 6 #define V8_DEBUG_H_ |
| 7 | 7 |
| 8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
| 9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
| 10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 namespace internal { | 25 namespace internal { |
| 26 | 26 |
| 27 | 27 |
| 28 // Forward declarations. | 28 // Forward declarations. |
| 29 class DebugScope; | 29 class DebugScope; |
| 30 | 30 |
| 31 | 31 |
| 32 // Step actions. NOTE: These values are in macros.py as well. | 32 // Step actions. NOTE: These values are in macros.py as well. |
| 33 enum StepAction { | 33 enum StepAction { |
| 34 StepNone = -1, // Stepping not prepared. | 34 StepNone = -1, // Stepping not prepared. |
| 35 StepOut = 0, // Step out of the current function. | 35 StepOut = 0, // Step out of the current function. |
| 36 StepNext = 1, // Step to the next statement in the current function. | 36 StepNext = 1, // Step to the next statement in the current function. |
| 37 StepIn = 2, // Step into new functions invoked or the next statement | 37 StepIn = 2, // Step into new functions invoked or the next statement |
| 38 // in the current function. | 38 // in the current function. |
| 39 StepMin = 3, // Perform a minimum step in the current function. | 39 StepMin = 3, // Perform a minimum step in the current function. |
| 40 StepInMin = 4 // Step into new functions invoked or perform a minimum step | 40 StepInMin = 4, // Step into new functions invoked or perform a minimum step |
| 41 // in the current function. | 41 // in the current function. |
| 42 StepFrame = 5 // Step into a new frame or return to previous frame. |
| 42 }; | 43 }; |
| 43 | 44 |
| 44 | 45 |
| 45 // Type of exception break. NOTE: These values are in macros.py as well. | 46 // Type of exception break. NOTE: These values are in macros.py as well. |
| 46 enum ExceptionBreakType { | 47 enum ExceptionBreakType { |
| 47 BreakException = 0, | 48 BreakException = 0, |
| 48 BreakUncaughtException = 1 | 49 BreakUncaughtException = 1 |
| 49 }; | 50 }; |
| 50 | 51 |
| 51 | 52 |
| 52 // Type of exception break. NOTE: These values are in macros.py as well. | 53 // Type of exception break. |
| 53 enum BreakLocatorType { | 54 enum BreakLocatorType { |
| 54 ALL_BREAK_LOCATIONS = 0, | 55 ALL_BREAK_LOCATIONS = 0, |
| 55 SOURCE_BREAK_LOCATIONS = 1 | 56 SOURCE_BREAK_LOCATIONS = 1, |
| 57 CALLS_AND_RETURNS = 2, |
| 56 }; | 58 }; |
| 57 | 59 |
| 58 | 60 |
| 59 // The different types of breakpoint position alignments. | 61 // The different types of breakpoint position alignments. |
| 60 // Must match Debug.BreakPositionAlignment in debug-debugger.js | 62 // Must match Debug.BreakPositionAlignment in debug-debugger.js |
| 61 enum BreakPositionAlignment { | 63 enum BreakPositionAlignment { |
| 62 STATEMENT_ALIGNED = 0, | 64 STATEMENT_ALIGNED = 0, |
| 63 BREAK_POSITION_ALIGNED = 1 | 65 BREAK_POSITION_ALIGNED = 1 |
| 64 }; | 66 }; |
| 65 | 67 |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 // Break point handling. | 380 // Break point handling. |
| 379 bool SetBreakPoint(Handle<JSFunction> function, | 381 bool SetBreakPoint(Handle<JSFunction> function, |
| 380 Handle<Object> break_point_object, | 382 Handle<Object> break_point_object, |
| 381 int* source_position); | 383 int* source_position); |
| 382 bool SetBreakPointForScript(Handle<Script> script, | 384 bool SetBreakPointForScript(Handle<Script> script, |
| 383 Handle<Object> break_point_object, | 385 Handle<Object> break_point_object, |
| 384 int* source_position, | 386 int* source_position, |
| 385 BreakPositionAlignment alignment); | 387 BreakPositionAlignment alignment); |
| 386 void ClearBreakPoint(Handle<Object> break_point_object); | 388 void ClearBreakPoint(Handle<Object> break_point_object); |
| 387 void ClearAllBreakPoints(); | 389 void ClearAllBreakPoints(); |
| 388 void FloodWithOneShot(Handle<JSFunction> function); | 390 void FloodWithOneShot(Handle<JSFunction> function, |
| 391 BreakLocatorType type = ALL_BREAK_LOCATIONS); |
| 389 void FloodBoundFunctionWithOneShot(Handle<JSFunction> function); | 392 void FloodBoundFunctionWithOneShot(Handle<JSFunction> function); |
| 390 void FloodHandlerWithOneShot(); | 393 void FloodHandlerWithOneShot(); |
| 391 void ChangeBreakOnException(ExceptionBreakType type, bool enable); | 394 void ChangeBreakOnException(ExceptionBreakType type, bool enable); |
| 392 bool IsBreakOnException(ExceptionBreakType type); | 395 bool IsBreakOnException(ExceptionBreakType type); |
| 393 | 396 |
| 394 // Stepping handling. | 397 // Stepping handling. |
| 395 void PrepareStep(StepAction step_action, | 398 void PrepareStep(StepAction step_action, |
| 396 int step_count, | 399 int step_count, |
| 397 StackFrame::Id frame_id); | 400 StackFrame::Id frame_id); |
| 398 void ClearStepping(); | 401 void ClearStepping(); |
| 399 void ClearStepOut(); | 402 void ClearStepOut(); |
| 400 bool IsStepping() { return thread_local_.step_count_ > 0; } | 403 bool IsStepping() { return thread_local_.step_count_ > 0; } |
| 401 bool StepNextContinue(BreakLocationIterator* break_location_iterator, | 404 bool StepNextContinue(BreakLocationIterator* break_location_iterator, |
| 402 JavaScriptFrame* frame); | 405 JavaScriptFrame* frame); |
| 403 bool StepInActive() { return thread_local_.step_into_fp_ != 0; } | 406 bool StepInActive() { return thread_local_.step_into_fp_ != 0; } |
| 404 void HandleStepIn(Handle<JSFunction> function, | 407 void HandleStepIn(Handle<Object> function_obj, Handle<Object> holder, |
| 405 Handle<Object> holder, | 408 Address fp, bool is_constructor); |
| 406 Address fp, | |
| 407 bool is_constructor); | |
| 408 bool StepOutActive() { return thread_local_.step_out_fp_ != 0; } | 409 bool StepOutActive() { return thread_local_.step_out_fp_ != 0; } |
| 409 | 410 |
| 410 // Purge all code objects that have no debug break slots. | 411 // Purge all code objects that have no debug break slots. |
| 411 void PrepareForBreakPoints(); | 412 void PrepareForBreakPoints(); |
| 412 | 413 |
| 413 // Returns whether the operation succeeded. Compilation can only be triggered | 414 // Returns whether the operation succeeded. Compilation can only be triggered |
| 414 // if a valid closure is passed as the second argument, otherwise the shared | 415 // if a valid closure is passed as the second argument, otherwise the shared |
| 415 // function needs to be compiled already. | 416 // function needs to be compiled already. |
| 416 bool EnsureDebugInfo(Handle<SharedFunctionInfo> shared, | 417 bool EnsureDebugInfo(Handle<SharedFunctionInfo> shared, |
| 417 Handle<JSFunction> function); | 418 Handle<JSFunction> function); |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 | 617 |
| 617 // Step action for last step performed. | 618 // Step action for last step performed. |
| 618 StepAction last_step_action_; | 619 StepAction last_step_action_; |
| 619 | 620 |
| 620 // Source statement position from last step next action. | 621 // Source statement position from last step next action. |
| 621 int last_statement_position_; | 622 int last_statement_position_; |
| 622 | 623 |
| 623 // Number of steps left to perform before debug event. | 624 // Number of steps left to perform before debug event. |
| 624 int step_count_; | 625 int step_count_; |
| 625 | 626 |
| 626 // Frame pointer from last step next action. | 627 // Frame pointer from last step next or step frame action. |
| 627 Address last_fp_; | 628 Address last_fp_; |
| 628 | 629 |
| 629 // Number of queued steps left to perform before debug event. | 630 // Number of queued steps left to perform before debug event. |
| 630 int queued_step_count_; | 631 int queued_step_count_; |
| 631 | 632 |
| 632 // Frame pointer for frame from which step in was performed. | 633 // Frame pointer for frame from which step in was performed. |
| 633 Address step_into_fp_; | 634 Address step_into_fp_; |
| 634 | 635 |
| 635 // Frame pointer for the frame where debugger should be called when current | 636 // Frame pointer for the frame where debugger should be called when current |
| 636 // step out action is completed. | 637 // step out action is completed. |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 // several frames above. | 747 // several frames above. |
| 747 // There is no calling conventions here, because it never actually gets | 748 // There is no calling conventions here, because it never actually gets |
| 748 // called, it only gets returned to. | 749 // called, it only gets returned to. |
| 749 static void GenerateFrameDropperLiveEdit(MacroAssembler* masm); | 750 static void GenerateFrameDropperLiveEdit(MacroAssembler* masm); |
| 750 }; | 751 }; |
| 751 | 752 |
| 752 | 753 |
| 753 } } // namespace v8::internal | 754 } } // namespace v8::internal |
| 754 | 755 |
| 755 #endif // V8_DEBUG_H_ | 756 #endif // V8_DEBUG_H_ |
| OLD | NEW |