StackFrame compute_frame(TargetAddress address)
{
var method = Lookup (address);
var iframe = inferior.GetCurrentFrame ();
var registers = inferior.GetRegisters ();
if ((method != null) && method.HasLineNumbers) {
var source = method.LineNumberTable.Lookup (address);
if (source != null)
return new StackFrame (
thread, FrameType.Normal, iframe.Address, iframe.StackPointer,
iframe.FrameAddress, registers, method, source);
else
return new StackFrame (
thread, FrameType.Normal, iframe.Address, iframe.StackPointer,
iframe.FrameAddress, registers, method);
} else {
if (method != null)
return new StackFrame (
thread, FrameType.Normal, iframe.Address, iframe.StackPointer,
iframe.FrameAddress, registers, method);
else {
Symbol name;
try {
name = SimpleLookup (address, false);
} catch {
name = null;
}
return new StackFrame (
thread, FrameType.Normal, iframe.Address, iframe.StackPointer,
iframe.FrameAddress, registers, thread.NativeLanguage,
name);
}
}
}