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.
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ł
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.
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 :)
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 :)
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ł.
zobacz na post (http://bit.ly/ceR20M) z rozwiazaniem, masz gotowy kod ktory to robi – w sekcji Mono Cecil
O widzisz.. fajne.. dzięki, choć boje się analizować jakąkolwiek aplikację, pewnie trochę tego znajdzie :)
Comments are closed.