Пример #1
0
 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;
 }
Пример #2
0
		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);
			}
		}
Пример #3
0
        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);
 }
Пример #5
0
 public void SetStepRanges(COR_DEBUG_STEP_RANGE[] ranges, bool isRangeIl)
 {
     EnsureNotYetStepped();
     if (ranges == null)
     {
         throw new ArgumentNullException("ranges");
     }
     m_stepRanges = ranges;
     m_isRangeIl = isRangeIl;
 }