| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using ILRuntime.Runtime.Stack;namespace ILRuntime.Runtime.Intepreter{    public class ILRuntimeException : Exception    {        string stackTrace;        string thisInfo, localInfo;        internal ILRuntimeException(string message, ILIntepreter intepreter, CLR.Method.ILMethod method, Exception innerException = null)            : base(message, innerException)                {            var ds = intepreter.AppDomain.DebugService;            if (innerException is ILRuntimeException)            {                ILRuntimeException e = innerException as ILRuntimeException;                stackTrace = e.stackTrace;                thisInfo = e.thisInfo;                localInfo = e.localInfo;            }            else            {                stackTrace = ds.GetStackTrace(intepreter);                if (method.HasThis)                    thisInfo = ds.GetThisInfo(intepreter);                else                    thisInfo = "";                localInfo = ds.GetLocalVariableInfo(intepreter);            }            if (ds.OnILRuntimeException != null) {                ds.OnILRuntimeException(ToString());            }        }        public override string StackTrace        {            get            {                return stackTrace;            }        }        public string ThisInfo        {            get { return thisInfo; }        }        public string LocalInfo        {            get            {                return localInfo;            }        }        public override string ToString()        {            StringBuilder message = new StringBuilder();            message.AppendLine(Message);            if (!string.IsNullOrEmpty(ThisInfo))            {                message.AppendLine("this:");                message.AppendLine(ThisInfo);            }            message.AppendLine("Local Variables:");            message.AppendLine(LocalInfo);            message.AppendLine(StackTrace);            if (InnerException != null)                message.AppendLine(InnerException.ToString());            return message.ToString();        }    }}
 |