public int GetDataTipText(TextSpan[] pSpan, out string pbstrText) { if (_debugger.CurrentMode != dbgDebugMode.dbgBreakMode) { pbstrText = null; return(VSConstants.S_FALSE); } try { TextSpan span = pSpan[0]; if (TextView.GetWordExtent(span.iStartLine, span.iStartIndex, (uint)WORDEXTFLAGS.WORDEXT_CURRENT, pSpan) == VSConstants.S_OK) { span = pSpan[0]; string key; if (TextView.GetTextStream(span.iStartLine, span.iStartIndex, span.iEndLine, span.iEndIndex, out key) == VSConstants.S_OK) { EnvDTE.Expression exp = _debugger.GetExpression("$" + key, false, 500); if (exp != null && exp.IsValidValue) { int result = _vsdebugger.GetDataTipValue(_vsTextLines, pSpan, exp.Name, out pbstrText); pbstrText = exp.Name; return(result); } } } } catch (Exception) { //TODO do some warning -david } pbstrText = null; return(VSConstants.S_FALSE); }
string GetArgValue(string arg, EnvDTE.Debugger debugger) { ThreadHelper.ThrowIfNotOnUIThread(); if (arg.StartsWith("$")) { if (!SavedResults.ContainsKey(arg)) { throw new Exception(String.Format("Using unknown variable {0}", arg)); } var indexResult = SavedResults[arg].GetResults()[0]; if (indexResult.IsLiteral) { return(indexResult.Expression); } else { var expr = debugger.GetExpression(indexResult.Expression + ",d"); return(expr.Value); } } else { return(arg); } }
Expression FindUnderMousePointer(EnvDTE.Debugger debugger, MouseHoverEventArgs e) { var point = e.TextPosition.GetPoint(e.TextPosition.AnchorBuffer, PositionAffinity.Predecessor); if (!point.HasValue) { return(null); } SnapshotSpan span; var name = GetVariableNameAndSpan(point.Value, out span); if (name == null) { return(null); } var expression = debugger.GetExpression(name); if (!expression.IsValidValue) { return(null); } return(expression); }
public override string GetDataTipText(int line, int col, out TextSpan span) { span = new TextSpan(); EnvDTE.DTE dte = (EnvDTE.DTE)_ls.GetService(typeof(EnvDTE.DTE)); EnvDTE.Debugger dbg = dte.Debugger as EnvDTE.Debugger; if (dbg != null && dte.Debugger.CurrentMode == dbgDebugMode.dbgBreakMode) { StringBuilder sb = new StringBuilder(); int n = 0; int len = _origcasetargets.Length; foreach (string s in _origcasetargets) { n++; sb.Append(s); if (n < len) { sb.Append('.'); } } string txt = sb.ToString(); //HACK WARNING!! :DD //I put a $ in front of the expression so I know that is not a watch in //ze function IDebugExpressionContext2.ParseText (alberto) string taggedtxt = "$" + txt; Expression e; try { Debug.WriteLine("GetExpression(" + taggedtxt + ")"); e = dbg.GetExpression(taggedtxt, false, 500); } catch (Exception) { return(null); } if (e == null || !e.IsValidValue) { return(null); } span.iStartLine = _line; span.iEndLine = _line; span.iStartIndex = _start; span.iEndIndex = _end; return(txt); } return(null); }
private List <Identifier> GetIdentifiers(GraphElementFamily family) { ThreadHelper.ThrowIfNotOnUIThread(); var ranges = new List <IdentifierPartRange>(); foreach (var partTemplate in family.Ranges) { var beginString = _debugger.GetExpression(partTemplate.BeginTemplate).Value; var endString = _debugger.GetExpression(partTemplate.EndTemplate).Value; Debug.WriteLine(beginString); Debug.WriteLine(endString); if (Int32.TryParse(beginString, out var begin) && Int32.TryParse(endString, out var end)) { ranges.Add(new IdentifierPartRange(partTemplate.Name, begin, end)); } else { return(null); } } return(Identifier.GetAllIdentifiersInRange(ranges)); }
public GetExpressionResult GetExpression(string expression) { ThreadHelper.ThrowIfNotOnUIThread(); var res = MeasureTime(() => { ThreadHelper.ThrowIfNotOnUIThread(); var expr = _debugger.GetExpression(expression); return(new GetExpressionResult { IsValid = expr.IsValidValue, Value = expr.Value }); }, ref _timeSpanGetExpressions, ref _numberOfGetExpressionCalls); if (!res.IsValid) { _buffer.Append($"Expression {expression} is not a valid value:\n{res.Value}\n"); } return(res); }
public Common.Expression GetExpression(string expressionText) => new Common.Expression(_debugger.GetExpression(expressionText));
private void parse_watch(String input, ref StringBuilder name, ref StringBuilder value, ref StringBuilder type) { //This fuction extracts variable name and type from the Clipboard on CtrC command //on a selected item in the Watch window //input looks like this // size -858993460 const int\r //\t as delimiters //sometimes there is "" for char pointers so " is delimieter also //space is also delimiter //const int is a type //size is variable name OutputMessage("Input String: " + input); int words = 0; char delimiter = (char)(0x09); // \t char delimiter1 = (char)(0x22); //" char delimiter2 = (char)(0x00); // space is not delimiter char endline = '\r'; for (int i = 0; i < input.Length; ++i) { if (input[i] == endline) { break; } if (((input[i] == delimiter) || (input[i] == delimiter1) || (input[i] == delimiter2)) && ((input[i + 1] != delimiter) && (input[i + 1] != delimiter1) && (input[i + 1] != delimiter2))) { ++words; } if ((input[i] != delimiter) && (input[i] != delimiter1) && (input[i] != delimiter2) && (words == 1)) { name.Append(input[i]); } if ((input[i] != delimiter) && (input[i] != delimiter1) && (input[i] != delimiter2) && (words == 2)) { value.Append(input[i]); } if ((input[i] != delimiter) && (input[i] != delimiter1) && (input[i] != delimiter2) && (words == 3)) { type.Append(input[i]); } } //also there must be numbers //like 0x01020304 {1.7800000} //in vs1023 //removing averything except //first 10 symbols { int value_length = value.Length; value.Remove(10, value_length - 1 - 9); } //the type may contain [] like //float[num] //in this case we removing num] //float [256] -> float [ int length = type.Length; int idx = 0; for (idx = 0; idx < length; ++idx) { if (type[idx] == '[') { break; } } if (idx != length) { type.Remove(idx + 1, length - idx - 1); } OutputMessage("Parse Result: " + name.ToString() + " " + value.ToString() + " " + type.ToString()); //new feature //trying to get address from debugger string var_name = "signal"; DTE dte = (DTE)Package.GetGlobalService(typeof(DTE)); EnvDTE.Debugger dbg = dte.Debugger; Expression exp = dbg.GetExpression(var_name, false, 1000); string v = exp.Value; string t = exp.Type; }