コード例 #1
0
        void WriteToken(DmdMemberInfo member)
        {
            if (!Tokens)
            {
                return;
            }
            var primitiveFormatter = new VisualBasicPrimitiveValueFormatter(output, GetValueFormatterOptions() & ~ValueFormatterOptions.Decimal, cultureInfo);
            var tokenString        = primitiveFormatter.ToFormattedUInt32((uint)member.MetadataToken);

            OutputWrite(CommentBegin + tokenString + CommentEnd, DbgTextColor.Comment);
        }
コード例 #2
0
        void WriteOffset()
        {
            if (!ShowIP)
            {
                return;
            }
            WriteSpace();
            OutputWrite("(", DbgTextColor.Punctuation);
            OutputWrite("IL", DbgTextColor.Text);
            var primitiveFormatter = new VisualBasicPrimitiveValueFormatter(output, GetValueFormatterOptions() & ~ValueFormatterOptions.Decimal, cultureInfo);

            var loc             = evalInfo.Frame.Location as IDbgDotNetCodeLocation;
            var ilOffsetMapping = loc?.ILOffsetMapping ?? DbgILOffsetMapping.Exact;

            switch (ilOffsetMapping)
            {
            case DbgILOffsetMapping.Prolog:
                OutputWrite("=", DbgTextColor.Operator);
                OutputWrite("prolog", DbgTextColor.Text);
                break;

            case DbgILOffsetMapping.Epilog:
                OutputWrite("=", DbgTextColor.Operator);
                OutputWrite("epilog", DbgTextColor.Text);
                break;

            case DbgILOffsetMapping.Exact:
            case DbgILOffsetMapping.Approximate:
                OutputWrite(ilOffsetMapping == DbgILOffsetMapping.Exact ? "=" : "≈", DbgTextColor.Operator);
                if (evalInfo.Frame.FunctionOffset <= ushort.MaxValue)
                {
                    primitiveFormatter.FormatUInt16((ushort)evalInfo.Frame.FunctionOffset);
                }
                else
                {
                    primitiveFormatter.FormatUInt32(evalInfo.Frame.FunctionOffset);
                }
                break;

            case DbgILOffsetMapping.Unknown:
            case DbgILOffsetMapping.NoInfo:
            case DbgILOffsetMapping.UnmappedAddress:
            default:
                OutputWrite("=", DbgTextColor.Operator);
                OutputWrite("???", DbgTextColor.Error);
                break;
            }

            if (!(loc is null))
            {
                var addr = loc.NativeAddress;
                if (addr.Address != 0)
                {
                    WriteCommaSpace();
                    OutputWrite("Native", DbgTextColor.Text);
                    OutputWrite("=", DbgTextColor.Operator);
                    if (evalInfo.Runtime.Process.PointerSize == 4)
                    {
                        primitiveFormatter.FormatUInt32((uint)addr.Address);
                    }
                    else
                    {
                        primitiveFormatter.FormatUInt64(addr.Address);
                    }
                    long offs = (long)addr.Offset;
                    if (offs < 0)
                    {
                        offs = -offs;
                        OutputWrite("-", DbgTextColor.Operator);
                    }
                    else
                    {
                        OutputWrite("+", DbgTextColor.Operator);
                    }
                    primitiveFormatter.FormatFewDigits((ulong)offs);
                }
            }
            OutputWrite(")", DbgTextColor.Punctuation);
        }