| 736 | } |
| 737 | |
| 738 | bool CeDebugger::SetupStep(int frameIdx) |
| 739 | { |
| 740 | auto ceFrame = GetFrame(frameIdx); |
| 741 | if (ceFrame == NULL) |
| 742 | { |
| 743 | ContinueDebugEvent(); |
| 744 | return false; |
| 745 | } |
| 746 | |
| 747 | int entryIdx = 0; |
| 748 | auto curEntry = ceFrame->mFunction->FindEmitEntry(ceFrame->GetInstIdx(), &entryIdx); |
| 749 | if (curEntry == NULL) |
| 750 | { |
| 751 | ContinueDebugEvent(); |
| 752 | return false; |
| 753 | } |
| 754 | |
| 755 | auto ceMachine = mCeMachine; |
| 756 | auto ceContext = mCeMachine->mCurContext; |
| 757 | |
| 758 | if (entryIdx < ceFrame->mFunction->mEmitTable.mSize - 1) |
| 759 | { |
| 760 | int checkIdx = entryIdx + 1; |
| 761 | while (checkIdx < ceFrame->mFunction->mEmitTable.mSize) |
| 762 | { |
| 763 | auto checkEntry = &ceFrame->mFunction->mEmitTable[checkIdx]; |
| 764 | ceMachine->mStepState.mNextInstIdx = checkEntry->mCodePos; |
| 765 | if ((checkEntry->mScope != curEntry->mScope) || (checkEntry->mLine != curEntry->mLine)) |
| 766 | break; |
| 767 | ++checkIdx; |
| 768 | } |
| 769 | } |
| 770 | else |
| 771 | ceMachine->mStepState.mNextInstIdx = ceFrame->mFunction->mCode.mSize; |
| 772 | ceMachine->mStepState.mStartDepth = ceContext->mCallStack.mSize - frameIdx; |
| 773 | ceMachine->mSpecialCheck = true; |
| 774 | |
| 775 | ContinueDebugEvent(); |
| 776 | return true; |
| 777 | } |
| 778 | |
| 779 | void CeDebugger::StepInto(bool inAssembly) |
| 780 | { |
nothing calls this directly
no test coverage detected