예제 #1
0
 MDS.StackFrame GetFrame()
 {
     try {
         var frames = monoThread.GetFrames();
         return(frames.Length == 0 ? null : frames[0]);
     }
     catch (VMDisconnectedException) {
         return(null);
     }
 }
예제 #2
0
        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);
     }
 }
예제 #4
0
 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>());
     }
 }