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);
 }
Exemple #2
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #7
0
 public Common.Expression GetExpression(string expressionText) => new Common.Expression(_debugger.GetExpression(expressionText));
Exemple #8
0
        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;
        }