OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 }; | 72 }; |
73 | 73 |
74 | 74 |
75 // Type of exception break. NOTE: These values are in macros.py as well. | 75 // Type of exception break. NOTE: These values are in macros.py as well. |
76 enum BreakLocatorType { | 76 enum BreakLocatorType { |
77 ALL_BREAK_LOCATIONS = 0, | 77 ALL_BREAK_LOCATIONS = 0, |
78 SOURCE_BREAK_LOCATIONS = 1 | 78 SOURCE_BREAK_LOCATIONS = 1 |
79 }; | 79 }; |
80 | 80 |
81 | 81 |
| 82 // The different types of breakpoint position alignments. |
| 83 // Must match Debug.BreakPositionAlignment in debug-debugger.js |
| 84 enum BreakPositionAlignment { |
| 85 STATEMENT_ALIGNED = 0, |
| 86 BREAK_POSITION_ALIGNED = 1 |
| 87 }; |
| 88 |
| 89 |
82 // Class for iterating through the break points in a function and changing | 90 // Class for iterating through the break points in a function and changing |
83 // them. | 91 // them. |
84 class BreakLocationIterator { | 92 class BreakLocationIterator { |
85 public: | 93 public: |
86 explicit BreakLocationIterator(Handle<DebugInfo> debug_info, | 94 explicit BreakLocationIterator(Handle<DebugInfo> debug_info, |
87 BreakLocatorType type); | 95 BreakLocatorType type); |
88 virtual ~BreakLocationIterator(); | 96 virtual ~BreakLocationIterator(); |
89 | 97 |
90 void Next(); | 98 void Next(); |
91 void Next(int count); | 99 void Next(int count); |
92 void FindBreakLocationFromAddress(Address pc); | 100 void FindBreakLocationFromAddress(Address pc); |
93 void FindBreakLocationFromPosition(int position); | 101 void FindBreakLocationFromPosition(int position, |
| 102 BreakPositionAlignment alignment); |
94 void Reset(); | 103 void Reset(); |
95 bool Done() const; | 104 bool Done() const; |
96 void SetBreakPoint(Handle<Object> break_point_object); | 105 void SetBreakPoint(Handle<Object> break_point_object); |
97 void ClearBreakPoint(Handle<Object> break_point_object); | 106 void ClearBreakPoint(Handle<Object> break_point_object); |
98 void SetOneShot(); | 107 void SetOneShot(); |
99 void ClearOneShot(); | 108 void ClearOneShot(); |
100 bool IsStepInLocation(Isolate* isolate); | 109 bool IsStepInLocation(Isolate* isolate); |
101 void PrepareStepIn(Isolate* isolate); | 110 void PrepareStepIn(Isolate* isolate); |
102 bool IsExit() const; | 111 bool IsExit() const; |
103 bool HasBreakPoint(); | 112 bool HasBreakPoint(); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 bool InDebugger() { return thread_local_.debugger_entry_ != NULL; } | 243 bool InDebugger() { return thread_local_.debugger_entry_ != NULL; } |
235 void PreemptionWhileInDebugger(); | 244 void PreemptionWhileInDebugger(); |
236 void Iterate(ObjectVisitor* v); | 245 void Iterate(ObjectVisitor* v); |
237 | 246 |
238 Object* Break(Arguments args); | 247 Object* Break(Arguments args); |
239 void SetBreakPoint(Handle<JSFunction> function, | 248 void SetBreakPoint(Handle<JSFunction> function, |
240 Handle<Object> break_point_object, | 249 Handle<Object> break_point_object, |
241 int* source_position); | 250 int* source_position); |
242 bool SetBreakPointForScript(Handle<Script> script, | 251 bool SetBreakPointForScript(Handle<Script> script, |
243 Handle<Object> break_point_object, | 252 Handle<Object> break_point_object, |
244 int* source_position); | 253 int* source_position, |
| 254 BreakPositionAlignment alignment); |
245 void ClearBreakPoint(Handle<Object> break_point_object); | 255 void ClearBreakPoint(Handle<Object> break_point_object); |
246 void ClearAllBreakPoints(); | 256 void ClearAllBreakPoints(); |
247 void FloodWithOneShot(Handle<JSFunction> function); | 257 void FloodWithOneShot(Handle<JSFunction> function); |
248 void FloodBoundFunctionWithOneShot(Handle<JSFunction> function); | 258 void FloodBoundFunctionWithOneShot(Handle<JSFunction> function); |
249 void FloodHandlerWithOneShot(); | 259 void FloodHandlerWithOneShot(); |
250 void ChangeBreakOnException(ExceptionBreakType type, bool enable); | 260 void ChangeBreakOnException(ExceptionBreakType type, bool enable); |
251 bool IsBreakOnException(ExceptionBreakType type); | 261 bool IsBreakOnException(ExceptionBreakType type); |
252 void PrepareStep(StepAction step_action, int step_count); | 262 void PrepareStep(StepAction step_action, int step_count); |
253 void ClearStepping(); | 263 void ClearStepping(); |
254 void ClearStepOut(); | 264 void ClearStepOut(); |
(...skipping 22 matching lines...) Expand all Loading... |
277 | 287 |
278 // Check whether a code stub with the specified major key is a possible break | 288 // Check whether a code stub with the specified major key is a possible break |
279 // point location. | 289 // point location. |
280 static bool IsSourceBreakStub(Code* code); | 290 static bool IsSourceBreakStub(Code* code); |
281 static bool IsBreakStub(Code* code); | 291 static bool IsBreakStub(Code* code); |
282 | 292 |
283 // Find the builtin to use for invoking the debug break | 293 // Find the builtin to use for invoking the debug break |
284 static Handle<Code> FindDebugBreak(Handle<Code> code, RelocInfo::Mode mode); | 294 static Handle<Code> FindDebugBreak(Handle<Code> code, RelocInfo::Mode mode); |
285 | 295 |
286 static Handle<Object> GetSourceBreakLocations( | 296 static Handle<Object> GetSourceBreakLocations( |
287 Handle<SharedFunctionInfo> shared); | 297 Handle<SharedFunctionInfo> shared, |
| 298 BreakPositionAlignment position_aligment); |
288 | 299 |
289 // Getter for the debug_context. | 300 // Getter for the debug_context. |
290 inline Handle<Context> debug_context() { return debug_context_; } | 301 inline Handle<Context> debug_context() { return debug_context_; } |
291 | 302 |
292 // Check whether a global object is the debug global object. | 303 // Check whether a global object is the debug global object. |
293 bool IsDebugGlobal(GlobalObject* global); | 304 bool IsDebugGlobal(GlobalObject* global); |
294 | 305 |
295 // Check whether this frame is just about to return. | 306 // Check whether this frame is just about to return. |
296 bool IsBreakAtReturn(JavaScriptFrame* frame); | 307 bool IsBreakAtReturn(JavaScriptFrame* frame); |
297 | 308 |
(...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1050 | 1061 |
1051 DISALLOW_COPY_AND_ASSIGN(MessageDispatchHelperThread); | 1062 DISALLOW_COPY_AND_ASSIGN(MessageDispatchHelperThread); |
1052 }; | 1063 }; |
1053 | 1064 |
1054 | 1065 |
1055 } } // namespace v8::internal | 1066 } } // namespace v8::internal |
1056 | 1067 |
1057 #endif // ENABLE_DEBUGGER_SUPPORT | 1068 #endif // ENABLE_DEBUGGER_SUPPORT |
1058 | 1069 |
1059 #endif // V8_DEBUG_H_ | 1070 #endif // V8_DEBUG_H_ |
OLD | NEW |