示例#1
0
        public static DebugInfo.SequencePoint?GetCurrentSequencePoint(this DebugInfo.Method method, ExecutionContext context)
        {
            if (method != null)
            {
                var sequencePoints = method.SequencePoints.OrderBy(sp => sp.Address).ToArray();
                if (sequencePoints.Length > 0)
                {
                    var ip = context.InstructionPointer;

                    for (int i = 0; i < sequencePoints.Length; i++)
                    {
                        if (ip == sequencePoints[i].Address)
                        {
                            return(sequencePoints[i]);
                        }
                    }

                    if (ip <= sequencePoints[0].Address)
                    {
                        return(sequencePoints[0]);
                    }

                    for (int i = 0; i < sequencePoints.Length - 1; i++)
                    {
                        if (ip > sequencePoints[i].Address && ip <= sequencePoints[i + 1].Address)
                        {
                            return(sequencePoints[i]);
                        }
                    }
                }
            }

            return(null);
        }
示例#2
0
 public static IEnumerable <(string name, string type)> GetLocals(this DebugInfo.Method method)
 => method.Parameters.Concat(method.Variables);