protected virtual StackFrame CreateFrame (ResultData frameData)
{
string lang = "Native";
string func = frameData.GetValueString ("func");
string sadr = frameData.GetValueString ("addr");
if (func == "??" && session.IsMonoProcess) {
// Try to get the managed func name
try {
var data = session.RunCommand ("-data-evaluate-expression", "mono_pmip(" + sadr + ")");
string val = data.GetValueString ("value");
if (val != null) {
int i = val.IndexOf ('"');
if (i != -1) {
func = val.Substring (i).Trim ('"',' ');
lang = "Mono";
}
}
} catch {
}
}
int line = -1;
string sline = frameData.GetValueString ("line");
if (sline != null)
line = int.Parse (sline);
string sfile = frameData.GetValueString ("fullname");
if (sfile == null)
sfile = frameData.GetValueString ("file");
if (sfile == null)
sfile = frameData.GetValueString ("from");
SourceLocation loc = new SourceLocation (func ?? "?", sfile, line);
long addr;
if (!string.IsNullOrEmpty (sadr))
addr = long.Parse (sadr.Substring (2), NumberStyles.HexNumber);
else
addr = 0;
return new StackFrame (addr, loc, lang);
}