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 KOMENTARZE

  1. 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ę :)) jak to można zrobić.

    Pozdrawiam,
    Paweł

  2. 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 :)

    Pozdrawiam.

  3. Super :)

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

  4. 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 :) oczywiście, że można pytanie tylko czy aż tak to się opłaca :)

  5. 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ł.

  6. O widzisz.. fajne.. dzięki, choć boje się analizować jakąkolwiek aplikację, pewnie trochę tego znajdzie :)

Comments are closed.