public UiTraceNode(UiTraceNode parent, tracer_wrapper.TracedInstruction inst) { ParentNode = parent; TracedInstruction = inst; Header = $"{TracerApi.DecodeAndFormatInstruction(inst.BranchSource)}"; ToolTip = $@"BranchSource: 0x{inst.BranchSource.ToUInt64():X8} BranchTarget: 0x{inst.BranchTarget.ToUInt64():X8} EAX: 0x{inst.RegisterSet.Eax.ToUInt64():X8} EBX: 0x{inst.RegisterSet.Ebx.ToUInt64():X8} ECX: 0x{inst.RegisterSet.Ecx.ToUInt64():X8} EDX: 0x{inst.RegisterSet.Edx.ToUInt64():X8} ESI: 0x{inst.RegisterSet.Esi.ToUInt64():X8} EDI: 0x{inst.RegisterSet.Edi.ToUInt64():X8} EBP: 0x{inst.RegisterSet.Ebp.ToUInt64():X8} ESP: 0x{inst.RegisterSet.Esp.ToUInt64():X8} SegGS: 0x{inst.RegisterSet.SegGs.ToUInt64()} SegFS: 0x{inst.RegisterSet.SegFs.ToUInt64()} SegES: 0x{inst.RegisterSet.SegEs.ToUInt64()} SegDS: 0x{inst.RegisterSet.SegDs.ToUInt64()} SegCS: 0x{inst.RegisterSet.SegCs.ToUInt64()} SegSS: 0x{inst.RegisterSet.SegSs.ToUInt64()}"; }
private void AddNode(TracedInstruction traceResult, UiTraceNode parent) { var newNode = new UiTraceNode(parent, traceResult); if (parent != null) { parent.Items.Add(newNode); } else { TraceOutputTreeView.Items.Add(newNode); } if (traceResult.CallDepth == 0 && traceResult.Type == TracedInstructionType.Return) { TraceOutputTreeView.Items.Add(new Separator()); } lastTraceNode = newNode; var scrollViewer = (ScrollViewer)this.FindVisualChildElement(TraceOutputTreeView, typeof(ScrollViewer)); scrollViewer.ScrollToBottom(); }