public int[] GetDimensions(EnvDTE.Expression expression) { if (expression == null) { throw new ArgumentNullException("expression"); } int[] dims; switch (GetExpressionType(expression)) { case ExpressionType.Matrix: dims = new int[2]; EnvDTE.Expressions members = expression.DataMembers.Item("Item").DataMembers; dims[0] = ParseDimension(members.Item("NumRows").Value); dims[1] = ParseDimension(members.Item("NumCols").Value); break; case ExpressionType.Vector: dims = new int[1]; dims[0] = expression.DataMembers.Count - 1; break; default: throw new NotSupportedException(string.Format("'{0} is not supported.'", expression.Type)); } return(dims); }
public Common.Expression GetEntry(params string[] entryNames) { var dte = ((DTE2)GetDTE()); if (dte.Debugger.CurrentStackFrame == null) // Ensure that debugger is running { throw new Exception($"Could not find locals. Debugger is not running."); } EnvDTE.Expressions expressions = dte.Debugger.CurrentStackFrame.Locals; EnvDTE.Expression entry = null; int i = 0; while (i < entryNames.Length && TryGetEntryInternal(entryNames[i], expressions, out entry)) { i++; expressions = entry.DataMembers; } if ((i == entryNames.Length) && (entry != null)) { return(new Common.Expression(entry)); } string localHierarchicalName = string.Join("->", entryNames); string allLocalsString = string.Join("\n", GetAllLocals(dte.Debugger.CurrentStackFrame.Locals)); throw new Exception($"\nCould not find the local named {localHierarchicalName}.\nAll available locals are: \n{allLocalsString}"); }
public int[] GetDimensions(EnvDTE.Expression expression) { if (expression == null) { throw new ArgumentNullException(nameof(expression)); } ThreadHelper.ThrowIfNotOnUIThread(); int[] dims; switch (GetExpressionType(expression)) { case ExpressionType.Matrix: dims = new int[2]; EnvDTE.Expressions members = expression.DataMembers.Item("Item").DataMembers; dims[0] = ParseDimension(members.Item("NumRows").Value); dims[1] = ParseDimension(members.Item("NumCols").Value); break; case ExpressionType.Vector: dims = new int[1]; dims[0] = expression.DataMembers.Count - 1; break; default: throw new NotSupportedException($"'{expression.Type} is not supported.'"); } return(dims); }
private bool TryGetEntryInternal(string entryName, EnvDTE.Expressions expressions, out EnvDTE.Expression expression) { expression = expressions.Cast <EnvDTE.Expression>().FirstOrDefault(e => e.Name == entryName); if (expression != null) { return(true); } return(false); }
public int GetCount() { var dte = ((DTE2)GetDTE()); if (dte.Debugger.CurrentStackFrame != null) // Ensure that debugger is running { EnvDTE.Expressions locals = dte.Debugger.CurrentStackFrame.Locals; return(locals.Count); } return(0); }
private EnvDTE.Expression GetEntryInternal(string entryName) { var dte = ((DTE2)GetDTE()); if (dte.Debugger.CurrentStackFrame != null) // Ensure that debugger is running { EnvDTE.Expressions locals = dte.Debugger.CurrentStackFrame.Locals; return(GetEntryInternal(entryName, locals)); } throw new Exception($"Could not find locals. Debugger is not running."); }
private EnvDTE.Expression GetEntryInternal(string entryName, EnvDTE.Expressions expressions) { var expressionCollection = expressions.Cast <EnvDTE.Expression>(); var expressionMatched = expressionCollection.FirstOrDefault(e => e.Name == entryName); if (expressionMatched != null) { return(expressionMatched); } string nestedExpressionNamesString = string.Join(",", expressionCollection.Select(e => e.Name)); throw new Exception($"Could not find the local named {entryName}. Available locals are {nestedExpressionNamesString}."); }
private static IEnumerable <string> GetAllLocals(EnvDTE.Expressions expressions) { foreach (var expression in expressions.Cast <EnvDTE.Expression>()) { var expressionName = expression.Name; yield return(expressionName); var nestedExpressions = expression.DataMembers; if (nestedExpressions != null) { foreach (var nestedLocal in GetAllLocals(nestedExpressions)) { yield return(string.Format("{0}->{1}", expressionName, nestedLocal)); } } } }
public Common.Expression GetEntry(string entryName) { var dte = ((DTE2)GetDTE()); if (dte.Debugger.CurrentStackFrame != null) // Ensure that debugger is running { EnvDTE.Expressions locals = dte.Debugger.CurrentStackFrame.Locals; foreach (EnvDTE.Expression local in locals) { if (local.Name == entryName) { return(new Common.Expression(local)); } } } throw new Exception($"Could not find the local named {entryName}."); }