Changeset 162711 in webkit for trunk/Source/JavaScriptCore/debugger/Debugger.cpp
- Timestamp:
- Jan 24, 2014, 11:07:31 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/debugger/Debugger.cpp
r162652 r162711 149 149 , m_hasHandlerForExceptionCallback(false) 150 150 , m_isInWorkerThread(isInWorkerThread) 151 , m_steppingMode(SteppingModeDisabled) 151 152 , m_reasonForPause(NotPaused) 152 153 , m_pauseOnCallFrame(0) … … 155 156 , m_lastExecutedSourceID(noSourceID) 156 157 , m_topBreakpointID(noBreakpointID) 157 , m_shouldPause(false)158 158 { 159 159 } … … 190 190 ASSERT(m_globalObjects.contains(globalObject)); 191 191 m_globalObjects.remove(globalObject); 192 193 clearDebuggerRequests(globalObject); 192 194 globalObject->setDebugger(0); 193 195 if (!m_globalObjects.size()) … … 195 197 } 196 198 197 void Debugger::setShouldPause(bool value) 198 { 199 m_shouldPause = value; 199 class Debugger::SetSteppingModeFunctor { 200 public: 201 SetSteppingModeFunctor(Debugger* debugger, SteppingMode mode) 202 : m_debugger(debugger) 203 , m_mode(mode) 204 { 205 } 206 207 bool operator()(CodeBlock* codeBlock) 208 { 209 if (m_debugger == codeBlock->globalObject()->debugger()) { 210 if (m_mode == SteppingModeEnabled) 211 codeBlock->setSteppingMode(CodeBlock::SteppingModeEnabled); 212 else 213 codeBlock->setSteppingMode(CodeBlock::SteppingModeDisabled); 214 } 215 return false; 216 } 217 218 private: 219 Debugger* m_debugger; 220 SteppingMode m_mode; 221 }; 222 223 void Debugger::setSteppingMode(SteppingMode mode) 224 { 225 if (mode == m_steppingMode) 226 return; 227 m_steppingMode = mode; 228 229 if (!m_vm) 230 return; 231 HeapIterationScope iterationScope(m_vm->heap); 232 SetSteppingModeFunctor functor(this, mode); 233 m_vm->heap.forEachCodeBlock(functor); 200 234 } 201 235 … … 203 237 { 204 238 applyBreakpoints(codeBlock); 205 } 206 207 void Debugger::unregisterCodeBlock(CodeBlock* codeBlock) 208 { 209 codeBlock->clearAllBreakpoints(); 239 if (isStepping()) 240 codeBlock->setSteppingMode(CodeBlock::SteppingModeEnabled); 210 241 } 211 242 … … 436 467 } 437 468 438 class Debugger::Clear BreakpointsFunctor {469 class Debugger::ClearCodeBlockDebuggerRequestsFunctor { 439 470 public: 440 Clear BreakpointsFunctor(Debugger* debugger)471 ClearCodeBlockDebuggerRequestsFunctor(Debugger* debugger) 441 472 : m_debugger(debugger) 442 473 { … … 445 476 bool operator()(CodeBlock* codeBlock) 446 477 { 447 if (codeBlock-> numBreakpoints() && m_debugger == codeBlock->globalObject()->debugger())448 codeBlock->clear AllBreakpoints();478 if (codeBlock->hasDebuggerRequests() && m_debugger == codeBlock->globalObject()->debugger()) 479 codeBlock->clearDebuggerRequests(); 449 480 return false; 450 481 } … … 463 494 return; 464 495 HeapIterationScope iterationScope(m_vm->heap); 465 ClearBreakpointsFunctor functor(this); 496 ClearCodeBlockDebuggerRequestsFunctor functor(this); 497 m_vm->heap.forEachCodeBlock(functor); 498 } 499 500 class Debugger::ClearDebuggerRequestsFunctor { 501 public: 502 ClearDebuggerRequestsFunctor(JSGlobalObject* globalObject) 503 : m_globalObject(globalObject) 504 { 505 } 506 507 bool operator()(CodeBlock* codeBlock) 508 { 509 if (codeBlock->hasDebuggerRequests() && m_globalObject == codeBlock->globalObject()) 510 codeBlock->clearDebuggerRequests(); 511 return false; 512 } 513 514 private: 515 JSGlobalObject* m_globalObject; 516 }; 517 518 void Debugger::clearDebuggerRequests(JSGlobalObject* globalObject) 519 { 520 ASSERT(m_vm); 521 HeapIterationScope iterationScope(m_vm->heap); 522 ClearDebuggerRequestsFunctor functor(globalObject); 466 523 m_vm->heap.forEachCodeBlock(functor); 467 524 } … … 481 538 m_pauseOnNextStatement = pause; 482 539 if (pause) 483 setS houldPause(true);540 setSteppingMode(SteppingModeEnabled); 484 541 } 485 542 … … 490 547 491 548 m_pauseOnNextStatement = true; 492 setS houldPause(true);549 setSteppingMode(SteppingModeEnabled); 493 550 m_currentCallFrame = m_vm->topCallFrame; 494 551 ASSERT(m_currentCallFrame); … … 511 568 512 569 m_pauseOnNextStatement = true; 513 setS houldPause(true);570 setSteppingMode(SteppingModeEnabled); 514 571 notifyDoneProcessingDebuggerEvents(); 515 572 } … … 547 604 updateCallFrame(callFrame); 548 605 pauseIfNeeded(callFrame); 549 if (! shouldPause())606 if (!isStepping()) 550 607 m_currentCallFrame = 0; 551 608 } … … 591 648 592 649 if (!m_pauseOnNextStatement && !m_pauseOnCallFrame) { 593 setS houldPause(false);650 setSteppingMode(SteppingModeDisabled); 594 651 m_currentCallFrame = nullptr; 595 652 } … … 604 661 if (m_pauseOnExceptionsState == PauseOnAllExceptions || (m_pauseOnExceptionsState == PauseOnUncaughtExceptions && !hasHandler)) { 605 662 m_pauseOnNextStatement = true; 606 setS houldPause(true);663 setSteppingMode(SteppingModeEnabled); 607 664 } 608 665 … … 662 719 if (!m_isInWorkerThread) 663 720 updateCallFrameAndPauseIfNeeded(callFrame); 664 else if ( shouldPause())721 else if (isStepping()) 665 722 updateCallFrame(callFrame); 666 723 } … … 692 749 PauseReasonDeclaration reason(*this, PausedForBreakpoint); 693 750 m_pauseOnNextStatement = true; 694 setS houldPause(true);751 setSteppingMode(SteppingModeEnabled); 695 752 updateCallFrameAndPauseIfNeeded(callFrame); 696 753 }
Note:
See TracChangeset
for help on using the changeset viewer.