Formatowanie wyrażeń w oknie Watch w Visual Studio
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).