Polecam

.NET Blogs PL
CodeGuru


Challenge: W jaki sposób wypisać wystąpienia boxingu i unboxing w kodzie aplikacji?

September 21, 2010 in categories: pro by Gutek

8

Małe odejście od PivotViewer, poniżej mamy prosty kod (wystarczy go wkleić do aplikacji konsolowej by się uruchomił). Chciałbym wypisać (to jest ważne, nie chcę widzieć tego w UI, chcę to wypisać sobie) wszystkie operacje boxingu i unboxingu znajdujące się w tym kodzie (może to być to numer linii i typ operacji, lub sam typ operacji plus informacja w którym miejscu to następuje).

using System;

namespace BoxingAndUnboxing
{
    class Program
    {
        static void Main()
        {
            int a = 10;
            object obj = a;
            int b = (int)obj;

            Console.ReadLine();
        }
    }
}

Rozwiązań jest kilka, ale jedno z nich mnie szczególnie interesuje gdyż IMO jest najszybsze i jest pod ręką – może jest znane, może nie, ja się dowiedziałem o nim dzisiaj :) Jednakże w odpowiedziach nie tylko to jedno mnie interesuje, z chęcią zobaczę też inne - i może okazać się, że to czego się nauczyłem nie przyda mi się gdyż istnieje lepsze rozwiązanie :)

PS.: jakby ktoś się zastanawiał po co komu może być potrzebna informacja o boxingu i unboxingu w kodzie to warto przeczytać ten krótki akapit.




 

 

 

7 comments for "Challenge: W jaki sposób wypisać wystąpienia boxingu i unboxing w kodzie aplikacji?"

  1. Paweł Łukasik
    Paweł Łukasik Says:

    A czy "najszybsze i jest pod rąką" oznacza, że jest to wykonywalne z poziomu VS?

    Oczywiście, aby zobaczyć boxing unboxing wystarczy przepuścić kod przez ildasm'a i szukać odpowiednich opcode'ów ILa.

    ildasm.exe BoxUnBox.exe /text | findstr [un]box

    Ale to pokaże nam tylko instrukcje IL'a a nie C#/VB, tak więc sam chętnie się dowiem (o ile wcześniej nie wymyślę Smile) jak to można zrobić.

    Pozdrawiam,
    Paweł

    • Gutek
      Gutek Says:

      Super Smile

      Wlasnie o to mi chodzilo - nie znalem tego Smile tez nigdzie nie napisalem by wypisywal instrukcje C#/VB Smile tylko by informowal o box/unboxingu. Tak czy siak, kilka propozycji innych niż ildasm /text w nowym art Smile

  2. FiDO
    FiDO Says:

    Nie jest to jeszcze rozwiązanie kompletne, ale można się pobawić parametrami /linenum i/lub /source do ildasm'a. Dostajemy wtedy dodatkową informację w postaci linii w kodzie lub nawet samego kodu w komentarzu. Wystarczyło by to odpowiednio sparsować albo machnąć jakiegoś prostego toola i będzie to co chcesz podane na talerzu Smile

    Pozdrawiam.

    • Gutek
      Gutek Says:

      z linenum i source jest trudniej operować gdyż trzeba nie tylko wyłapać linię box ale i też linię nad nią/pod nią.

      A toolsa Smile oczywiście, że można pytanie tylko czy aż tak to się opłaca Smile

      • FiDO
        FiDO Says:

        Gdyby był tool to możnaby go używać częściej, to nie jest zapewne jednorazowa potrzeba, więc wg mnie by się przydał.
        W sumie jak znajdę czas (dobry żart...) to może sam coś prostego napisze, bo tak na szybko w necie nie znalazłem gotowca, który już by to robił.

1 trackbacks or pingbacks for "Challenge: W jaki sposób wypisać wystąpienia boxingu i unboxing w kodzie aplikacji?"

Comments are closed

© 2008-2010 Jakub Gutkowski. Powered by BlogEngine.NET 1.5.1.14. Hosted on OrcsWeb.

Design