예제 #1
0
        private void Step(int stepIn)
        {
            // get sequence points
            var startOffset    = _thread.CurrentFrame.GetOffset();
            var sequencePoint  = _thread.CurrentFrame.Function.Symbols.GetSequencePoint(startOffset);
            var sequencePoints = _thread.CurrentFrame.Function.Symbols.GetIgnoredSequencePoints().ToList();

            sequencePoints.Insert(0, sequencePoint);

            int size = Marshal.SizeOf(sequencePoint.ByteRange);

            // write ranges to pointer.
            IntPtr rangesPtr = Marshal.AllocHGlobal(size * sequencePoints.Count);

            for (int i = 0; i < sequencePoints.Count; i++)
            {
                Marshal.StructureToPtr(sequencePoints[i].ByteRange, rangesPtr + (i * size), true);
            }

            // step
            _comStepper.StepRange(stepIn, rangesPtr, (uint)sequencePoints.Count);

            // free ranges
            Marshal.FreeHGlobal(rangesPtr);

            _thread.Process.Continue();
        }
예제 #2
0
 /** Step until code outside of the range is reached. */
 public void StepRange(bool into, COR_DEBUG_STEP_RANGE[] ranges, int cnt)
 {
     m_step.StepRange(into ? 1 : 0, ranges, (uint)cnt);
 }
예제 #3
0
 public void StepIn(int[] ranges)
 {
     operation = StepperOperation.StepIn;
     corStepper.StepRange(true /* step in */, ranges);
 }
 public void StepRange(bool stepInto, COR_DEBUG_STEP_RANGE[] stepRanges)
 {
     m_step.StepRange(stepInto ? 1 : 0, stepRanges, (uint)stepRanges.Length);
 }