wtorek, kwiecień 07, 2009

DebuggerVisualizer

Dziś będzie o tym atrybucie i co za jego pomocą możemy uczynić.

Często debuggujemy nasze aplikacje i często używamy możliwości 'podejrzenia' co dana zmienna zawiera. Niestety w przypadku bardziej skomplikowanych typów to co oferuje nam domyślnie VS nie jest wystarczające.

Weźmy dla przykłady bitmapy. To co mamy domyślnie wygląda mniej więcej tak:

Pełno danych, ale tak naprawdę, nie mówią one mam tego najważniejszego. Jak ta bitmapa wygląda. O ile lepiej nam by się żyło, gdybyśmy mogli (oczywiście nadal zachowując możliwość wyświetlenia wszystkich właściwości i zmiennych) zobaczyć taki obraz:

Wbrew pozorom nie jest to wcale takie trudne. Wszystko dzięki atrybutowi DebuggerVisualizer oraz klasie DialogDebuggerVisualizer. Ale po kolei:

Żeby stworzyć taki Visualizer, wystarczy, że utworzymy projekt typu ClassLibrary. A następnie dziedziczmy naszą klasę z DialogDebuggerVisualizer:


public class BitmapVisualizerDialog : DialogDebuggerVisualizer


{


}


Klasa ta jest abstrakcyjna i wymaga od nas napisania ciała dla metody Show. W niej robimy to co chcemy.


var item = objectProvider.GetObject();


var i = (Image) item;


var form = new CompareBitmapDialog {Image = i};


form.ShowDialog();


Gdzie CompareBitmapDialog to zwykła forma z PictureBox'em. Pominę to jak to zrobić. Myślę, że każdy będzie to potrafił.

Na koniec musimy powiedzieć jeszcze jakiego typu/-ów dotyczy ten Vizualizer. Robimy to, wspomnianym w tytule atrybutem, DebuggerVisualizer.


[assembly: DebuggerVisualizertypeof(BitmapVisualizerDialog),                               


                                Target = typeof(Bitmap))]


 


[assembly: DebuggerVisualizertypeof(BitmapVisualizerDialog),                               


                                Target = typeof(Image))]


W zasadzie już wszystko. Pozostał jeszcze deployment. Sprowadza się on do skopiowania naszego wynikowego pliku .dll do odpowiedniego folderu.

<VS Install Dir>\Common7\Packages\Debugger\Visualizers

lub

My Documents\Visual Studio\Visualizers

w zależności czy chcemy, aby dostęp mieli wszyscy czy tylko dany użytkownik. Po restarcie Visual Studio przy Bitmapach pojawi się mała lupka:

Klikając na nią uruchamiamy nasz Vizualizer.

0 komentarze: