예제 #1
0
        public bool Run(SptWrapper wrapper, string args)
        {
            ulong addr = wrapper.GetExpression(args);

            ClrMethodDescData mdd;
            uint n = 0;
            wrapper.Dac.GetMethodDescData(addr, 0, out mdd, 0, null, out n);
            ClrMethodTableData mtd = wrapper.Dac.GetMethodTableData(mdd.MethodTable);

            string methodName = wrapper.GetMethodDescName(addr);

            var tr = wrapper.CreateTableWriter();

            tr.AddColumn(17, true);
            tr.AddColumn(-1);

            tr.TextColumn("Method Name:").TextColumn(methodName.ToString()).NewRow()
              .TextColumn("Class:").PointerColumn(mtd.EEClass).NewRow()
              .TextColumn("MethodTable:").PointerColumn(mdd.MethodTable).NewRow()
              .TextColumn("mdToken:").Column("0x{0:x8}", mdd.mdToken).NewRow()
              .TextColumn("Module:").PointerColumn(mdd.Module).NewRow()
              .TextColumn("IsJitted:").TextColumn(mdd.IsJitted != 0 ? "yes" : "no").NewRow()
              .TextColumn("CodeAddr:").PointerColumn(mdd.CodeAddr).NewRow()
              .TextColumn("Transparency:").TextColumn(GetTransparency(wrapper, addr)).NewRow();

            return true;
        }
예제 #2
0
        public bool Run(SptWrapper wrapper, string args)
        {
            ulong addr = wrapper.GetExpression(args);

            ClrMethodDescData mdd;
            uint n = 0;

            wrapper.Dac.GetMethodDescData(addr, 0, out mdd, 0, null, out n);
            ClrMethodTableData mtd = wrapper.Dac.GetMethodTableData(mdd.MethodTable);

            string methodName = wrapper.GetMethodDescName(addr);

            var tr = wrapper.CreateTableWriter();

            tr.AddColumn(17, true);
            tr.AddColumn(-1);

            tr.TextColumn("Method Name:").TextColumn(methodName.ToString()).NewRow()
            .TextColumn("Class:").PointerColumn(mtd.EEClass).NewRow()
            .TextColumn("MethodTable:").PointerColumn(mdd.MethodTable).NewRow()
            .TextColumn("mdToken:").Column("0x{0:x8}", mdd.mdToken).NewRow()
            .TextColumn("Module:").PointerColumn(mdd.Module).NewRow()
            .TextColumn("IsJitted:").TextColumn(mdd.IsJitted != 0 ? "yes" : "no").NewRow()
            .TextColumn("CodeAddr:").PointerColumn(mdd.CodeAddr).NewRow()
            .TextColumn("Transparency:").TextColumn(GetTransparency(wrapper, addr)).NewRow();

            return(true);
        }
예제 #3
0
        public bool Run(SptWrapper wrapper, string args)
        {
            var threads = wrapper.GetThreads();

            TableWriter tw = wrapper.CreateTableWriter();

            tw
            .AddColumn(4)
            .AddColumn(4)
            .AddColumn(4)
            .AddPointerColumn()
            .AddColumn(8)
            .AddColumn(11, true)
            .AddPointerColumn()
            .AddPointerColumn()
            .AddPointerColumn()
            .AddColumn(5, true)
            .AddColumn(3)
            .AddColumn(-1, true);

            tw.TextColumn("").TextColumn("ID").TextColumn("OSID").TextColumn("ThreadOb").TextColumn("State")
            .TextColumn("GC Mode").TextColumn("GC Alloc").TextColumn("Context").TextColumn("Domain  ").TextColumn("Lock").TextColumn("Apt")
            .TextColumn("Exception")
            .NewRow();

            foreach (var t in threads)
            {
                tw
                .HexColumn(0)
                .HexColumn(t.CorThreadId)
                .HexColumn(t.osThreadId)
                .PointerColumn(t.ThreadAddress)
                .HexColumn(t.State)
                .TextColumn(t.PreemptiveGCDisabled == 0 ? "Preemptive" : "Cooperative")
                .PointerColumn(t.GCAllocContext)
                .PointerColumn(t.GCAllocContextLimit)
                .PointerColumn(t.domain)
                .Column("{0}", t.LockCount)
                .TextColumn("MTA")
                .TextColumn("???");

                tw.NewRow();
            }

            return(true);
        }
예제 #4
0
        public bool Run(SptWrapper wrapper, string args)
        {
            var threads = wrapper.GetThreads();

            TableWriter tw = wrapper.CreateTableWriter();
            tw
                .AddColumn(4)
                .AddColumn(4)
                .AddColumn(4)
                .AddPointerColumn()
                .AddColumn(8)
                .AddColumn(11, true)
                .AddPointerColumn()
                .AddPointerColumn()
                .AddPointerColumn()
                .AddColumn(5, true)
                .AddColumn(3)
                .AddColumn(-1, true);

            tw.TextColumn("").TextColumn("ID").TextColumn("OSID").TextColumn("ThreadOb").TextColumn("State")
                .TextColumn("GC Mode").TextColumn("GC Alloc").TextColumn("Context").TextColumn("Domain  ").TextColumn("Lock").TextColumn("Apt")
                .TextColumn("Exception")
                .NewRow();

            foreach (var t in threads)
            {
                tw
                    .HexColumn(0)
                    .HexColumn(t.CorThreadId)
                    .HexColumn(t.osThreadId)
                    .PointerColumn(t.ThreadAddress)
                    .HexColumn(t.State)
                    .TextColumn(t.PreemptiveGCDisabled == 0 ? "Preemptive" : "Cooperative")
                    .PointerColumn(t.GCAllocContext)
                    .PointerColumn(t.GCAllocContextLimit)
                    .PointerColumn(t.domain)
                    .Column("{0}", t.LockCount)
                    .TextColumn("MTA")
                    .TextColumn("???");

                tw.NewRow();
            }

            return true;
        }