MDS.StackFrame GetFrame() { try { var frames = monoThread.GetFrames(); return(frames.Length == 0 ? null : frames[0]); } catch (VMDisconnectedException) { return(null); } }
void UpdateFrame() { var frames = frameThread.GetFrames(); // PERF: It's not likely that frames were removed, so always start searching from the frame index for (int i = frameIndex; i < frames.Length; i++) { var currentFrame = frames[i]; if (IsSameAsOurFrame(currentFrame)) { __monoFrame_DONT_USE = currentFrame; frameIndex = i; methodInvokeCounter = engine.MethodInvokeCounter; return; } } Debug.Fail("Failed to find the frame"); }
string EvaluateExpression(ThreadMirror thread, string exp) { try { MDB.StackFrame[] frames = thread.GetFrames(); if (frames.Length == 0) { return(string.Empty); } EvaluationOptions ops = Options.EvaluationOptions; ops.AllowTargetInvoke = true; SoftEvaluationContext ctx = new SoftEvaluationContext(this, frames[0], ops); ValueReference val = ctx.Evaluator.Evaluate(ctx, exp); return(val.CreateObjectValue(false).Value); } catch (Exception ex) { OnDebuggerOutput(true, ex.ToString()); return(string.Empty); } }
DbgEngineStackFrame[] GetNextStackFrames_MonoDebug(int maxFrames) { engine.DebuggerThread.VerifyAccess(); if (!engine.IsPaused || thread.IsClosed || continueCounter != engine.ContinueCounter) { return(Array.Empty <DbgEngineStackFrame>()); } try { if (frames == null) { frames = monoThread.GetFrames(); } var list = engine.stackFrameData.DbgEngineStackFrameList; try { while (list.Count < maxFrames && frameIndex < frames.Length) { list.Add(CreateEngineStackFrame(frames[frameIndex], frameIndex)); frameIndex++; } return(list.Count == 0 ? Array.Empty <DbgEngineStackFrame>() : list.ToArray()); } catch { engine.DbgRuntime.Process.DbgManager.Close(list.ToArray()); throw; } finally { list.Clear(); } } catch (VMDisconnectedException) { return(Array.Empty <DbgEngineStackFrame>()); } catch { return(Array.Empty <DbgEngineStackFrame>()); } }