private COR_DEBUG_STEP_RANGE[] createStepRange(uint start, int end) { var range = new COR_DEBUG_STEP_RANGE[1]; range[0] = new COR_DEBUG_STEP_RANGE() { startOffset = (UInt32) start, endOffset = (UInt32) end }; return range; }
void Step (bool into) { if (stepper != null) { stepper.IsActive (); CorFrame frame = activeThread.ActiveFrame; ISymbolReader reader = GetReaderForModule (frame.Function.Module.Name); if (reader == null) { RawContinue (into); return; } ISymbolMethod met = reader.GetMethod (new SymbolToken (frame.Function.Token)); if (met == null) { RawContinue (into); return; } uint offset; CorDebugMappingResult mappingResult; frame.GetIP (out offset, out mappingResult); // Find the current line SequencePoint currentSeq = null; foreach (SequencePoint sp in met.GetSequencePoints ()) { if (sp.Offset > offset) break; currentSeq = sp; } if (currentSeq == null) { RawContinue (into); return; } // Exclude all ranges belonging to the current line List<COR_DEBUG_STEP_RANGE> ranges = new List<COR_DEBUG_STEP_RANGE> (); SequencePoint lastSeq = null; foreach (SequencePoint sp in met.GetSequencePoints ()) { if (lastSeq != null && lastSeq.Line == currentSeq.Line) { COR_DEBUG_STEP_RANGE r = new COR_DEBUG_STEP_RANGE (); r.startOffset = (uint) lastSeq.Offset; r.endOffset = (uint) sp.Offset; ranges.Add (r); } lastSeq = sp; } stepper.StepRange (into, ranges.ToArray ()); ClearEvalStatus (); process.SetAllThreadsDebugState (CorDebugThreadState.THREAD_RUN, null); process.Continue (false); } }
public COR_DEBUG_STEP_RANGE[] GetStepRangesFromIP(int ip) { EnsureIsUpToDate(); // we cannot use GetRange here, since this function doesn't work // in ENC mode. // // we will calculate step ranges manually from sequence points. // COR_DEBUG_STEP_RANGE[] ret = null; for (int j = 0; j < m_SPcount; j++) if (m_SPoffsets[j] > ip) { ret = new COR_DEBUG_STEP_RANGE[1]; ret[0].endOffset = (uint)m_SPoffsets[j]; ret[0].startOffset = (uint)m_SPoffsets[j - 1]; break; } // let's handle correctly last step range from last sequence point till // end of the method. if (ret == null && m_SPcount > 0) { ret = new COR_DEBUG_STEP_RANGE[1]; ret[0].startOffset = (uint)m_SPoffsets[m_SPcount - 1]; ret[0].endOffset = (uint)CorFunction.ILCode.Size; } return ret; }
public void StepRange (bool stepInto, COR_DEBUG_STEP_RANGE[] stepRanges) { m_step.StepRange (stepInto ? 1 : 0, stepRanges, (uint) stepRanges.Length); }
public void SetStepRanges(COR_DEBUG_STEP_RANGE[] ranges, bool isRangeIl) { EnsureNotYetStepped(); if (ranges == null) { throw new ArgumentNullException("ranges"); } m_stepRanges = ranges; m_isRangeIl = isRangeIl; }