private void stepTraceData(int traceIdx) { if (traceIdx == TraceEntryIdx) { // Already here, do nothing return; } else if (traceIdx > TraceEntryIdx) { // Stepping Backwards, we copy the TraceThread for RegView update tracking TraceActiveThread = TraceActiveThread.Clone(); for (var i = TraceEntryIdx + 1; i <= traceIdx; ++i) { applyTraceFields(TraceEntries[i]); } TraceEntryIdx = traceIdx; } else if (traceIdx < TraceEntryIdx) { // Stepping 'forward', need to rescan TraceActiveThread = ActiveThread.Clone(); for (var i = 0; i <= traceIdx; ++i) { applyTraceFields(TraceEntries[i]); } TraceEntryIdx = traceIdx; } UpdatePauseInfo(); }
private void applyTraceFields(DebugTraceEntry trace) { foreach (DebugTraceEntryField field in trace.fields) { TraceActiveThread.ApplyTraceData(field.type, field.data); } TraceActiveThread.cia = trace.cia; }