Udostępnij przez


Pseudovariables w debugerze programu Visual Studio

Pseudovariables to terminy techniczne używane w celu wyświetlania określonych informacji w oknie zmiennej lub w oknie dialogowym QuickWatch. Można wprowadzić pseudovariable w taki sam sposób, jak w przypadku wprowadzania zmiennej normalnej. Pseudovariables nie są jednak zmiennymi i nie odpowiadają nazwom zmiennych w programie.

Example

Załóżmy, że piszesz aplikację w kodzie natywnym i chcesz zobaczyć liczbę uchwytów przydzielonych w swojej aplikacji. W oknie Obserwowanie możesz wprowadzić następujące pseudovariable w kolumnie Nazwa , a następnie nacisnąć Return, aby go ocenić:

$handles

W kodzie natywnym można użyć pseudovariables pokazanych w poniższej tabeli:

Pseudozmienna Funkcja
$err Wyświetla ostatnią wartość błędu ustawioną za pomocą funkcji SetLastError. Wyświetlana wartość reprezentuje, co zostanie zwrócone przez funkcję GetLastError.

Użyj $err,hr polecenia , aby wyświetlić zdekodowany formularz tej wartości. Jeśli na przykład ostatni błąd miał wartość 3, $err,hr wyświetli ERROR_PATH_NOT_FOUND : The system cannot find the path specified.
$handles Wyświetla liczbę uchwytów przydzielonych w aplikacji.
$vframe Wyświetla adres bieżącej ramki stosu.
$tid Wyświetla identyfikator wątku dla bieżącego wątku.
$env Wyświetla blok środowiska w przeglądarce ciągów.
$cmdline Wyświetla ciąg wiersza polecenia, który uruchomił program.
$pid Wyświetla identyfikator procesu.
$ registername

lub

@ registername
Wyświetla zawartość rejestru registername.

Zwykle można wyświetlić zawartość rejestru tylko po wprowadzeniu nazwy rejestru. Jedyną sytuacją, w której należy użyć tej składni, jest, gdy nazwa rejestru koliduje z nazwą zmiennej. Jeśli nazwa rejestru jest taka sama jak nazwa zmiennej w bieżącym zakresie, debuger interpretuje nazwę jako nazwę zmiennej. To wtedy $nazwa_rejestracji lub @nazwa_rejestracji jest przydatna.
$clk Wyświetla czas w cyklach zegara.
$user Wyświetla strukturę z informacjami o koncie dla konta, na którym działa aplikacja. Ze względów bezpieczeństwa informacje o hasłach nie są wyświetlane.
$exceptionstack Wyświetla ślad stosu bieżącego wyjątku środowiska uruchomieniowego systemu Windows. $ exceptionstack działa tylko w aplikacjach platformy UWP. $ exceptionstack nie jest obsługiwany w przypadku wyjątków C++ i SEH
$returnvalue Wyświetla wartość zwracaną metody.

W języku C# można użyć pseudovariables pokazanych w poniższej tabeli:

Pseudozmienna Funkcja
$exception Wyświetla informacje o ostatnim wyjątku. Jeśli nie wystąpił wyjątek, ocena $exception wyświetla komunikat o błędzie.

Po wyłączeniu Asystenta wyjątków, $exception zostanie automatycznie dodany do okna Zmienne lokalne, gdy wystąpi wyjątek.
$user Wyświetla strukturę z informacjami o koncie dla konta, na którym działa aplikacja. Ze względów bezpieczeństwa informacje o hasłach nie są wyświetlane.
$returnvalue Wyświetla wartość zwracaną metody .NET.
$threadSmallObjectHeapBytes Wyświetla łączną liczbę bajtów przydzielonych w małej stercie obiektów przez bieżący wątek. (.NET 6+)
$threadUserOldHeapBytes Wyświetla całkowitą liczbę bajtów przydzielonych w starej stercie użytkownika dla bieżącego wątku. User Old Heap = Large Object Heap + Pinned Object Heap (.NET 6+)

W języku Visual Basic można użyć pseudovariables pokazanych w poniższej tabeli:

Pseudozmienna Funkcja
$exception Wyświetla informacje o ostatnim wyjątku. Jeśli nie wystąpił wyjątek, ocena $exception wyświetla komunikat o błędzie.
$delete lub $$delete Usuwa niejawną zmienną, która została utworzona w oknie natychmiastowym . Składnia jest $delete,zmienna lub$delete,zmienna.
$objectids lub $listobjectids Wyświetla wszystkie aktywne identyfikatory obiektów jako elementy podrzędne określonego wyrażenia. Składnia jest $objectid,wyrażeniem lub$listobjectids,wyrażeniem.
$ N# Wyświetla obiekt o identyfikatorze obiektu równym N.
$dynamic Wyświetla specjalny węzeł Widok dynamiczny dla obiektu, który implementuje IDynamicMetaObjectProvider. Interfejs. Składnia to $dynamic,obiekt. Ta funkcja dotyczy tylko kodu korzystającego z programu .NET Framework w wersji 4 lub nowszej.