internal StackFrame UnwindStack(StackFrame frame, TargetMemoryAccess memory) { if (!IsLoaded) { return(null); } try { StackFrame new_frame = Module.UnwindStack(frame, memory); if (new_frame != null) { return(new_frame); } } catch { } int prologue_size; if (HasMethodBounds) { prologue_size = (int)(MethodStartAddress - StartAddress); } else { prologue_size = (int)(EndAddress - StartAddress); } int offset = (int)(frame.TargetAddress - StartAddress); byte[] prologue = memory.ReadBuffer(StartAddress, prologue_size); return(frame.Thread.Architecture.UnwindStack(frame, memory, prologue, offset)); }
internal StackFrame UnwindStack(StackFrame frame, TargetMemoryAccess memory) { if (!IsLoaded) return null; try { StackFrame new_frame = Module.UnwindStack (frame, memory); if (new_frame != null) return new_frame; } catch { } int prologue_size; if (HasMethodBounds) prologue_size = (int) (MethodStartAddress - StartAddress); else prologue_size = (int) (EndAddress - StartAddress); int offset = (int) (frame.TargetAddress - StartAddress); byte[] prologue = memory.ReadBuffer (StartAddress, prologue_size); return frame.Thread.Architecture.UnwindStack (frame, memory, prologue, offset); }