private string GetCurrentSourceCode(CorSourcePosition source) { SourceFileReader sourceReader = new SourceFileReader(source.Path); StringBuilder sb = new StringBuilder(); // Print three lines of code if (source.StartLine >= sourceReader.LineCount || source.EndLine >= sourceReader.LineCount) return string.Empty; for (Int32 i = source.StartLine; i <= source.EndLine; i++){ String line = sourceReader[i]; sb.AppendLine(line); } return sb.ToString(); }
public CorSourcePosition GetSourcePositionFromIP(Int32 ip) { InitSymbolInformation(); if (!p_hasSymbols) return null; if (p_SPcount > 0 && p_SPoffsets[0] <= ip) { Int32 i; // find a sequence point that the given instruction // pointer belongs to for (i = 0; i < p_SPcount; i++) { if (p_SPoffsets[i] >= ip) break; } // ip does not belong to any sequence point if (i == p_SPcount || p_SPoffsets[i] != ip) i--; CorSourcePosition sp = null; if (p_SPstartLines[i] == SpecialSequencePoint) { // special type of sequence point // it indicates that the source code // for this part is hidden from the debugger // search backward for the last known line // which is not a special sequence point Int32 noSpecialSequencePointInd = i; while (--noSpecialSequencePointInd >= 0) if (p_SPstartLines[noSpecialSequencePointInd] != SpecialSequencePoint) break; if (noSpecialSequencePointInd < 0) { // if not found in backward search // search forward for the first known line // which is not a special sequence point noSpecialSequencePointInd = i; while (++noSpecialSequencePointInd < p_SPcount) if (p_SPstartLines[noSpecialSequencePointInd] != SpecialSequencePoint) break; } if (noSpecialSequencePointInd < p_SPcount) { sp = new CorSourcePosition(true, p_SPdocuments[noSpecialSequencePointInd].URL, p_SPstartLines[noSpecialSequencePointInd], p_SPendLines[noSpecialSequencePointInd], p_SPstartColumns[noSpecialSequencePointInd], p_SPendColumns[noSpecialSequencePointInd]); } } else { sp = new CorSourcePosition(false, p_SPdocuments[i].URL, p_SPstartLines[i], p_SPendLines[i], p_SPstartColumns[i], p_SPendColumns[i]); } return sp; } return null; }