internal void WriteProcessName(IDbgTextWriter output, DbgModuleBreakpoint bp) => output.Write(DbgTextColor.String, bp.ProcessName ?? string.Empty);
예제 #2
0
 public override void FormatArrayName(IDbgTextWriter output, int index)
 {
     output.Write(DbgTextColor.Punctuation, ARRAY_PAREN_OPEN);
     output.Write(DbgTextColor.Number, index.ToString());
     output.Write(DbgTextColor.Punctuation, ARRAY_PAREN_CLOSE);
 }
예제 #3
0
 public DebuggerDisplayAttributeFormatter(DbgEvaluationInfo evalInfo, LanguageFormatter languageFormatter, IDbgTextWriter output, DbgValueFormatterOptions options, CultureInfo?cultureInfo)
 {
     Debug.Assert((options & DbgValueFormatterOptions.NoDebuggerDisplay) == 0);
     this.evalInfo          = evalInfo;
     this.languageFormatter = languageFormatter;
     this.output            = output;
     this.options           = options;
     this.cultureInfo       = cultureInfo;
 }
 void WriteToken(IDbgTextWriter output, uint token) =>
 output.Write(DbgTextColor.Number, GetHexPrefix() + token.ToString("X8"));
예제 #5
0
        protected override void FormatReturnValueMethodName(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgValueFormatterTypeOptions typeOptions, DbgValueFormatterOptions valueOptions, CultureInfo cultureInfo, DmdMethodBase method, DmdPropertyInfo property)
        {
            var typeFormatter = new Formatters.VisualBasic.VisualBasicTypeFormatter(output, typeOptions.ToTypeFormatterOptions(), null);

            typeFormatter.Format(method.DeclaringType, null);
            var valueFormatter = new Formatters.VisualBasic.VisualBasicPrimitiveValueFormatter(output, valueOptions.ToValueFormatterOptions(), cultureInfo);

            output.Write(DbgTextColor.Operator, ".");
            if ((object)property != null)
            {
                output.Write(MemberUtils.GetColor(property), Formatters.VisualBasic.VisualBasicTypeFormatter.GetFormattedIdentifier(property.Name));
                valueFormatter.WriteTokenComment(property.MetadataToken);
                output.Write(DbgTextColor.Operator, ".");
                output.Write(DbgTextColor.Keyword, "Get");
                valueFormatter.WriteTokenComment(method.MetadataToken);
            }
            else
            {
                var operatorInfo = Formatters.VisualBasic.Operators.TryGetOperatorInfo(method.Name);
                if (operatorInfo != null && method is DmdMethodInfo methodInfo)
                {
                    for (int i = 0; i < operatorInfo.Length; i++)
                    {
                        if (i > 0)
                        {
                            output.Write(DbgTextColor.Text, " ");
                        }
                        var s = operatorInfo[i];
                        output.Write('A' <= s[0] && s[0] <= 'Z' ? DbgTextColor.Keyword : DbgTextColor.Operator, s);
                    }
                    WriteGenericMethodArguments(output, method, typeFormatter);
                }
                else
                {
                    output.Write(TypeFormatterUtils.GetColor(method, canBeModule: true), Formatters.VisualBasic.VisualBasicTypeFormatter.GetFormattedIdentifier(method.Name));
                    valueFormatter.WriteTokenComment(method.MetadataToken);
                    WriteGenericMethodArguments(output, method, typeFormatter);
                }
            }
        }
예제 #6
0
 public void WriteName(IDbgTextWriter output, ValueNode vm) => vm.CachedName.WriteTo(output);
예제 #7
0
 public void WriteValue(IDbgTextWriter output, ValueNode vm, out bool textChanged)
 {
     vm.CachedValue.WriteTo(output);
     textChanged = !vm.OldCachedValue.IsDefault && !vm.OldCachedValue.Equals(vm.CachedValue);
 }
예제 #8
0
 public abstract void FormatArrayName(IDbgTextWriter output, int[] indexes);
예제 #9
0
 internal void FormatTypeName2(IDbgTextWriter output, DmdType type) => FormatTypeName(output, type);
예제 #10
0
 protected abstract void FormatFieldName(IDbgTextWriter output, DmdFieldInfo field);
예제 #11
0
 protected abstract void FormatPropertyName(IDbgTextWriter output, DmdPropertyInfo property);
예제 #12
0
 protected abstract void FormatTypeName(IDbgTextWriter output, DmdType type);
예제 #13
0
 public virtual bool FormatActualType(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgDotNetFormatter formatter, DbgValueFormatterTypeOptions options, DbgValueFormatterOptions valueOptions, CultureInfo cultureInfo) => false;
 internal void WriteAppDomainName(IDbgTextWriter output, DbgModuleBreakpoint bp) => output.Write(DbgTextColor.String, bp.AppDomainName ?? string.Empty);
예제 #15
0
 public override void FormatValue(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgDotNetValue value, DbgValueFormatterOptions options, CultureInfo cultureInfo) =>
 new CSharpValueFormatter(output, evalInfo, this, options.ToValueFormatterOptions(), cultureInfo).Format(value);
예제 #16
0
 public override void FormatStowedExceptionName(DbgEvaluationContext context, IDbgTextWriter output, uint id) =>
 output.Write(DbgTextColor.StowedExceptionName, AliasConstants.StowedExceptionName);
예제 #17
0
 public override void FormatFrame(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgStackFrameFormatterOptions options, DbgValueFormatterOptions valueOptions, CultureInfo cultureInfo) =>
 new CSharpStackFrameFormatter(output, evalInfo, this, options, valueOptions.ToValueFormatterOptions(), cultureInfo).Format();
예제 #18
0
 public override void FormatObjectIdName(DbgEvaluationContext context, IDbgTextWriter output, uint id) =>
 output.Write(DbgTextColor.ObjectIdName, AliasConstants.ObjectIdName + id.ToString());
예제 #19
0
 public void WriteValueAndObjectId(IDbgTextWriter output, ValueNode vm, out bool textChanged)
 {
     WriteValue(output, vm, out textChanged);
     WriteObjectId(output, vm);
 }
예제 #20
0
 void WriteError(IDbgTextWriter output) => output.Write(DbgTextColor.Error, "???");
 public override void WriteModule(IDbgTextWriter output) =>
 new DbgTextColorWriter(output).WriteFilename(location.Module.ModuleName);
예제 #22
0
 public abstract void WriteName(IDbgTextWriter writer, DbgExceptionDefinition definition, bool includeDescription);
        public override void WriteName(IDbgTextWriter output, DbgBreakpointLocationFormatterOptions options)
        {
            bool printedToken = false;

            if ((options & DbgBreakpointLocationFormatterOptions.Tokens) != 0)
            {
                WriteToken(output, location.Token);
                output.Write(DbgTextColor.Text, " ");
                printedToken = true;
            }

            var method = weakMethod?.Target as MethodDef ?? owner.GetDefinition <MethodDef>(location.Module, location.Token);

            if (method == null)
            {
                if (printedToken)
                {
                    output.Write(DbgTextColor.Error, "???");
                }
                else
                {
                    WriteToken(output, location.Token);
                }
            }
            else
            {
                if (weakMethod?.Target != method)
                {
                    weakMethod = new WeakReference(method);
                }
                owner.MethodDecompiler.Write(new DbgTextColorWriter(output), method, GetFormatterOptions(options));
            }

            switch (location.ILOffsetMapping)
            {
            case DbgILOffsetMapping.Exact:
            case DbgILOffsetMapping.Approximate:
                output.Write(DbgTextColor.Text, " ");
                output.Write(DbgTextColor.Operator, "+");
                output.Write(DbgTextColor.Text, " ");
                if (location.ILOffsetMapping == DbgILOffsetMapping.Approximate)
                {
                    output.Write(DbgTextColor.Operator, "~");
                }
                WriteILOffset(output, location.Offset);
                break;

            case DbgILOffsetMapping.Prolog:
                WriteText(output, "prolog");
                break;

            case DbgILOffsetMapping.Epilog:
                WriteText(output, "epilog");
                break;

            case DbgILOffsetMapping.Unknown:
            case DbgILOffsetMapping.NoInfo:
            case DbgILOffsetMapping.UnmappedAddress:
                WriteText(output, "???");
                break;

            default:
                Debug.Fail($"Unknown IL offset mapping: {location.ILOffsetMapping}");
                goto case DbgILOffsetMapping.Unknown;
            }

            output.Write(DbgTextColor.Text, " ");
            output.Write(DbgTextColor.Punctuation, "(");
            output.Write(DbgTextColor.Number, GetHexPrefix() + location.NativeAddress.Address.ToString("X8"));
            output.Write(DbgTextColor.Operator, "+");
            output.Write(DbgTextColor.Number,
                         (options & DbgBreakpointLocationFormatterOptions.Decimal) != 0 ?
                         location.NativeAddress.Offset.ToString() :
                         GetHexPrefix() + location.NativeAddress.Offset.ToString("X"));
            output.Write(DbgTextColor.Punctuation, ")");
        }
예제 #24
0
 public abstract void WriteName(IDbgTextWriter writer, DbgExceptionId id, bool includeDescription);
예제 #25
0
        protected override void FormatTypeName(IDbgTextWriter output, DmdType type)
        {
            const Formatters.TypeFormatterOptions options = Formatters.TypeFormatterOptions.IntrinsicTypeKeywords | Formatters.TypeFormatterOptions.Namespaces;

            new Formatters.CSharp.CSharpTypeFormatter(output, options, null).Format(type, null);
        }
예제 #26
0
        protected override void FormatReturnValueMethodName(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgValueFormatterTypeOptions typeOptions, DbgValueFormatterOptions valueOptions, CultureInfo?cultureInfo, DmdMethodBase method, DmdPropertyInfo?property)
        {
            var typeFormatter = new Formatters.CSharp.CSharpTypeFormatter(output, typeOptions.ToTypeFormatterOptions(), null);

            typeFormatter.Format(method.DeclaringType !, null);
            var valueFormatter = new Formatters.CSharp.CSharpPrimitiveValueFormatter(output, valueOptions.ToValueFormatterOptions(), cultureInfo);

            output.Write(DbgTextColor.Operator, ".");
            if (!(property is null))
            {
                if (property.GetIndexParameters().Count != 0)
                {
                    output.Write(DbgTextColor.Keyword, Keyword_this);
                    WriteMethodParameterList(output, method, typeFormatter, GetAllMethodParameterTypes(property.GetMethodSignature()), IndexerParenOpen, IndexerParenClose);
                }
                else
                {
                    output.Write(MemberUtils.GetColor(property), Formatters.CSharp.CSharpTypeFormatter.GetFormattedIdentifier(property.Name));
                }
                valueFormatter.WriteTokenComment(property.MetadataToken);
                output.Write(DbgTextColor.Operator, ".");
                output.Write(DbgTextColor.Keyword, "get");
                valueFormatter.WriteTokenComment(method.MetadataToken);
            }
예제 #27
0
 public abstract void Write(IDbgTextWriter output, string expr);
예제 #28
0
 public override void FormatType(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DmdType type, DbgDotNetValue value, DbgValueFormatterTypeOptions options, CultureInfo cultureInfo) =>
 new CSharpTypeFormatter(output, options.ToTypeFormatterOptions(), cultureInfo).Format(type, value);
예제 #29
0
 public override bool FormatActualType(DbgEvaluationInfo evalInfo, IDbgTextWriter output, DbgDotNetFormatter formatter, DbgValueFormatterTypeOptions options, DbgValueFormatterOptions valueOptions, CultureInfo?cultureInfo) =>
 columnFormatter?.FormatActualType(evalInfo, output, formatter, options, valueOptions, cultureInfo) ??
 FormatDebuggerDisplayAttributeType(evalInfo, output, formatter, valueOptions, cultureInfo);
 internal void WriteOrder(IDbgTextWriter output, DbgModuleBreakpoint bp) => WriteInt32Decimal(output, bp.Order);