Watch Window Debugowanie i podglądanie wartości zmiennych w oknie Watch, często byłoby dużo wygodniejsze, gdyby dane można rzutować na inne typy oraz poddawać je innym manipulacjom. Na szczęście prócz wymuszenia zmiany typów, okno to posiada wbudowany zestaw predefinowanych formatów, które mogą pobierać dane ze znanych typów wyliczeniowych (Windows Messages lub Code Errors) lub po prostu odczytywać napisy ANSI / UTF-16, bądź traktować dane jako tablice o zadanej wielkości, podając wartości wszystkich elementów. Wpisujemy je po przecinku na końcu wyrażenia, np.:

  • lpszFileName, su --> spowoduje wyświetlenie zawartości zmiennej jako tekstu UTF-16
  • dwMessage, wm  --> wyświetli zadaną liczbę jako kod Winows Message (WM_CREATE, …)
  • index, x  –-> wyświetli liczbę w trybie hexadecymalnym
  • (char *)lpszDeviceName, 10  --> wyświetli 10 pierwszych znaków napisu

Dla C++ ten zestaw formatów przedstawia się następująco:

Nazwa formatu Opis działania Przykładowe wyrażenie Wyświetlane
d, i signed decimal integer 0x1122FF, d  
u unsigned decimal integer 0x11, u  
o unsigned octal integer    
x, X hexadecimal integer    
l, h przedrostek long/short dla: d, i, u, o, x, X    
f signed floating point    
e signed scientific notation    
g signed floating point lub signed scientific notation w zależności od tego, który jest krótszy    
c single character    
s string    
su Unicode string 0x023571FA, su  
hr HRESULT 0x00000000L, hr S_OK
wc flagi Windows Class 0x00000040, wc WC_DEFAULTCHAR
wm numery komunikatów Windows Message 0x0001, wm WM_CREATE
! raw format, usuwa wszystkie informacje o typie    

 

Nazwa formatu Opis działania Przykładowe wyrażenie
ma 64 ASCII characters lpData, ma
m 16 bytes in hexadecimal, followed by 16 ASCII characters lpData, m
mb 16 bytes in hexadecimal, followed by 16 ASCII characters lpData, mb
mw 8 words lpData, mw
md 4 doublewords lpData, md
mq 2 quadwords lpData, mq
mu 2-byte characters (Unicode) lpData, mu

 

Tak samo i w programach w języku C# formaty przestawiają się:

Nazwa formatu Opis działania Przykładowe wyrażenie Wyświetlane
d decimal integer 0x64 100
h hexadecimal integer 11 0xB
nq string without quotes “Sample Text” Sample Text
private Wyświetla prywatne zmienne obiektu.    
raw Wyświetla dane własne obiektu. Poprawne tylko dla typów pośredniczących (proxy).    
Ac Wymusza wyliczanie wartości wyrażeń (przydatne gdy wyliczanie wartości i właściwości jest wyłączone).    

 

Jako ostatnie chciałem przestawić pseudo-zmienne, które pokazują charakterystyki uruchamianej aplikacji:

Pseudo-zmienna Opis działania
$handles Wyświetla liczbę zaalokowanych uchwytów (HANDLE) aplikacji.
$vframe Wyświetla adres aktualnej ramki stosu (stack frame).
$TID Wyświetla ID aktualnego wątku.
$ENV Wyświetla rozmiar środowiska przekazanego podczas uruchamiania aplikacji.

Próba edycji tej wartości wyświetli wszystkie zmienne środowiskowe w oknie Output, bez wykonania jakiejkolwiek zmiany.
$CMDLINE Wyświetla rozmiar linii poleceń, którą uruchomiono program.

Próba edycji wartości wyświetli wartość tekstową tej linii w oknie Output, bez jakiejkolwiek zmiany.
$registername
        or
@registername
Wyświetli zawartość rejestru o zadanej nazwie.
$clk Wyświetli aktualny czas w cyklach.
$user Wyświetli informacje o koncie użytkownika, z którego uruchomiono aplikację.
$exception (C#, VB.NET, F#) Wyświetli informacje o ostatnim wyjątku.

 

Więcej informacji można znaleźć w MSDN (o C++ tutaj, o C# tutaj).