internal void GetBacktrace(ThreadServant thread, TargetMemoryAccess memory,
Mode mode, TargetAddress until, int max_frames)
{
while (TryUnwind (thread, memory, mode, until)) {
if ((max_frames != -1) && (frames.Count > max_frames))
break;
}
// Ugly hack: in Mode == Mode.Default, we accept wrappers but not as the
// last frame.
if ((mode == Mode.Default) && (frames.Count > 1)) {
StackFrame last = this [frames.Count - 1];
if (!IsFrameOkForMode (last, Mode.Managed))
frames.Remove (last);
}
}