Informacje dziennika w oknie Dane wyjściowe przy użyciu punktów śledzenia w programie Visual Studio
Punkty śledzenia umożliwiają rejestrowanie informacji w oknie Dane wyjściowe w konfigurowalnych warunkach bez modyfikowania ani zatrzymywania kodu. Ta funkcja jest obsługiwana zarówno w językach zarządzanych (C#, Visual Basic, F#), jak i w kodzie natywnym, a także w językach takich jak JavaScript i Python.
Uwaga
Aby uzyskać informacje na temat rejestrowania informacji w oknie Dane wyjściowe programowo przy użyciu interfejsów API platformy .NET, zobacz Wysyłanie komunikatów do okna Dane wyjściowe.
Weźmy przykład
Poniższy przykładowy program to prosta for
pętla ze zmienną licznika, która zwiększa się o jeden za każdym razem, gdy pętla uruchamia inną iterację.
Poniższy przykładowy program to prosta for
pętla ze zmienną licznika, która zwiększa się o jeden za każdym razem, gdy pętla uruchamia inną iterację.
using System.Diagnostics;
namespace Tracepoints
{
public class Program
{
public static void Main(string[] args)
{
int counter = 0;
for (int i=0; i<=10; i++)
{
counter +=1;
}
}
}
}
Ustawianie punktów śledzenia w kodzie źródłowym
Punkty śledzenia można ustawić, określając ciąg wyjściowy w polu wyboru Akcja w oknie Ustawienia punktu przerwania.
Aby zainicjować punkt śledzenia, najpierw kliknij rynnę po lewej stronie numeru wiersza, w którym chcesz ustawić punkt śledzenia.
Umieść kursor na czerwonym okręgu, a następnie kliknij ikonę koła zębatego.
Ta akcja powoduje otwarcie okna Ustawienia punktu przerwania.
Zaznacz pole wyboru Akcja.
Zwróć uwagę, że czerwone kółko zmienia się na romb wskazujący, że punkt przerwania został przełączony z punktu przerwania na punkt śledzenia.
Wprowadź komunikat, który chcesz zalogować do pola tekstowego Pokaż komunikat w oknie danych wyjściowych (aby uzyskać szczegółowe informacje, zobacz sekcje w dalszej części tego artykułu).
Punkt śledzenia jest teraz ustawiony. Naciśnij przycisk "Zamknij", jeśli wszystko, co chcesz zrobić, to zarejestrować niektóre informacje w oknie danych wyjściowych.
Jeśli chcesz dodać warunki określające, czy komunikat jest wyświetlany, zaznacz pole wyboru Warunki .
Istnieją trzy opcje warunków: wyrażenie warunkowe, filtr i liczba trafień.
Punkty śledzenia można ustawić, określając ciąg wyjściowy w polu wyboru Akcja w oknie Ustawienia punktu przerwania.
Aby zainicjować punkt śledzenia, najpierw kliknij rynnę po lewej stronie numeru wiersza, w którym chcesz ustawić punkt śledzenia.
Umieść kursor na czerwonym okręgu i kliknij ikonę koła zębatego, aby otworzyć okno punktu przerwania Ustawienia.
Zaznacz pole wyboru Akcja.
Zwróć uwagę, że czerwone kółko zmienia się na romb wskazujący, że punkt przerwania został przełączony z punktu przerwania na punkt śledzenia.
Wprowadź komunikat, który chcesz zalogować do pola tekstowego Pokaż komunikat w oknie danych wyjściowych (aby uzyskać szczegółowe informacje, zobacz sekcje w dalszej części tego artykułu).
Punkt śledzenia jest teraz ustawiony. Naciśnij przycisk "Zamknij", jeśli wszystko, co chcesz zrobić, to zarejestrować niektóre informacje w oknie danych wyjściowych.
Jeśli chcesz dodać warunki określające, czy komunikat jest wyświetlany, zaznacz pole wyboru Warunki .
Istnieją trzy opcje warunków: wyrażenie warunkowe, filtr i liczba trafień.
Menu Akcje
To menu umożliwia rejestrowanie komunikatu w oknie Dane wyjściowe. Wpisz ciągi, które mają zostać wyświetlone w polu komunikatu (bez cudzysłowów). Jeśli chcesz wyświetlić wartości zmiennych, upewnij się, że ujęto je w nawiasy klamrowe.
Jeśli na przykład chcesz wyświetlić wartość counter
zmiennej w konsoli wyjściowej, wpisz {counter} w polu tekstowym wiadomości.
Jeśli klikniesz przycisk Zamknij , a następnie debugujesz program (F5), w oknie Dane wyjściowe zostaną wyświetlone następujące dane wyjściowe.
Możesz również użyć specjalnych słów kluczowych, aby wyświetlić bardziej szczegółowe informacje. Wprowadź słowo kluczowe dokładnie tak, jak pokazano poniżej (użyj słowa kluczowego "$" przed każdym słowem kluczowym i wszystkimi limitami dla samego słowa kluczowego).
Słowo kluczowe | Co to jest wyświetlane |
---|---|
$ADDRESS | Bieżąca instrukcja |
$CALLER | Wywoływanie nazwy funkcji |
$CALLSTACK | Stos wywołań |
$FUNCTION | Bieżąca nazwa funkcji |
$PID | Process ID |
$PNAME | Nazwa procesu |
$TID | Identyfikator wątku |
$TNAME | Nazwa wątku |
$TICK | Liczba znaczników (z funkcji GetTickCount systemu Windows) |
To menu umożliwia rejestrowanie komunikatu w oknie Dane wyjściowe. Wpisz ciągi, które mają zostać wyświetlone w polu komunikatu (bez cudzysłowów). Jeśli chcesz wyświetlić wartości zmiennych, upewnij się, że ujęto je w nawiasy klamrowe.
Jeśli na przykład chcesz wyświetlić wartość counter
zmiennej w konsoli wyjściowej, wpisz {counter}
w polu tekstowym komunikatu.
Jeśli klikniesz przycisk Zamknij , a następnie debugujesz program (F5), w oknie Dane wyjściowe zostaną wyświetlone następujące dane wyjściowe.
Możesz również użyć specjalnych słów kluczowych, aby wyświetlić bardziej szczegółowe informacje. Wprowadź słowo kluczowe dokładnie tak, jak pokazano poniżej (użyj słowa kluczowego "$" przed każdym słowem kluczowym i wszystkimi limitami dla samego słowa kluczowego).
Słowo kluczowe | Co to jest wyświetlane |
---|---|
$ADDRESS |
Bieżąca instrukcja |
$CALLER |
Wywoływanie nazwy funkcji |
$CALLSTACK |
Stos wywołań |
$FUNCTION |
Bieżąca nazwa funkcji |
$PID |
Process ID |
$PNAME |
Nazwa procesu |
$TID |
Identyfikator wątku |
$TNAME |
Nazwa wątku |
$TICK |
Liczba znaczników (z funkcji GetTickCount systemu Windows) |
Menu Warunki
Warunki umożliwiają filtrowanie komunikatów wyjściowych, więc są one wyświetlane tylko w niektórych scenariuszach. Dostępne są trzy główne rodzaje warunków.
Wyrażenie warunkowe
W przypadku wyrażenia warunkowego komunikat wyjściowy jest wyświetlany tylko wtedy, gdy zostaną spełnione określone warunki.
W przypadku wyrażeń warunkowych można ustawić punkt śledzenia, aby wyświetlić komunikat, gdy określony warunek ma wartość true lub gdy uległ zmianie. Jeśli na przykład chcesz wyświetlić tylko wartość licznika podczas nawet iteracji for
pętli, możesz wybrać opcję Jest prawdziwe , a następnie wpisać i%2 == 0
w polu tekstowym wiadomości.
Jeśli chcesz wydrukować wartość licznika po zmianie iteracji for
pętli, wybierz opcję Po zmianie i wpisz i
w polu tekstowym wiadomości.
Zachowanie opcji Po zmianie różni się w przypadku różnych języków programowania.
- W przypadku kodu natywnego debuger nie uwzględnia pierwszej oceny warunku jako zmiany, więc nie osiąga punktu śledzenia w pierwszej ocenie.
- W przypadku kodu zarządzanego debuger osiąga punkt śledzenia w pierwszej ocenie po wybraniu opcji Po zmianie .
Aby uzyskać bardziej kompleksowe omówienie prawidłowych wyrażeń, których można użyć podczas ustawiania warunków, zobacz Wyrażenia w debugerze.
W przypadku wyrażenia warunkowego komunikat wyjściowy jest wyświetlany tylko wtedy, gdy zostaną spełnione określone warunki.
W przypadku wyrażeń warunkowych można ustawić punkt śledzenia, aby wyświetlić komunikat, gdy określony warunek ma wartość true lub gdy uległ zmianie. Jeśli na przykład chcesz wyświetlić tylko wartość licznika podczas nawet iteracji for
pętli, możesz wybrać opcję Jest prawdziwe , a następnie wpisać i%2 == 0
w polu tekstowym wiadomości.
Jeśli chcesz wydrukować wartość licznika po zmianie iteracji for
pętli, wybierz opcję Po zmianie i wpisz i
w polu tekstowym wiadomości.
Zachowanie opcji Po zmianie różni się w przypadku różnych języków programowania.
- W przypadku kodu natywnego debuger nie uwzględnia pierwszej oceny warunku jako zmiany, więc nie osiąga punktu śledzenia w pierwszej ocenie.
- W przypadku kodu zarządzanego debuger osiąga punkt śledzenia w pierwszej ocenie po wybraniu opcji Po zmianie .
Można również ustawić warunek, gdy punkt śledzenia można włączyć, wstawiając punkt przerwania do dowolnej konkretnej sekcji kodu i zaznaczając pole wyboru Włącz tylko po trafieniu następującego punktu przerwania: opcja w menu punkt przerwania Ustawienia. Z listy opcji można wybrać dowolny punkt przerwania.
Aby uzyskać bardziej kompleksowe omówienie prawidłowych wyrażeń, których można użyć podczas ustawiania warunków, zobacz Wyrażenia w debugerze.
Liczba trafień
Warunek liczby trafień umożliwia wysyłanie danych wyjściowych tylko po wierszu kodu, w którym ustawiono punkt śledzenia, wykonał określoną liczbę razy.
W przypadku liczby trafień można wybrać opcję wyprowadzenia komunikatu, gdy wiersz kodu, w którym ustawiono punkt śledzenia, został wykonany określoną liczbę razy. Na podstawie wymagania może być równa lub jest wielokrotna lub jest większa lub równa określonej wartości liczby trafień. Wybierz opcję, która najlepiej odpowiada Twoim potrzebom, i wpisz wartość całkowitą w polu (na przykład 5), która reprezentuje iterację zainteresowania.
Warunek liczby trafień umożliwia wysyłanie danych wyjściowych tylko po wierszu kodu, w którym ustawiono punkt śledzenia, wykonał określoną liczbę razy.
W przypadku liczby trafień można wybrać opcję wyprowadzenia komunikatu, gdy wiersz kodu, w którym ustawiono punkt śledzenia, został wykonany określoną liczbę razy. Na podstawie wymagania może być równa lub jest wielokrotna lub jest większa lub równa określonej wartości liczby trafień. Wybierz opcję, która najlepiej odpowiada Twoim potrzebom, i wpisz wartość całkowitą w polu (na przykład 5), która reprezentuje iterację zainteresowania.
Punkt przerwania można również usunąć po pierwszym trafieniu, włączając pole wyboru Usuń punkt przerwania po trafieniu.
Filtr
W przypadku warunku filtru określ, dla których urządzeń, procesów lub wątków są wyświetlane dane wyjściowe.
Lista wyrażeń filtru:
- MachineName = "name"
- ProcessId = wartość
- ProcessName = "name"
- ThreadId = wartość
- ThreadName = "name"
Ujmij ciągi (takie jak nazwy) w cudzysłowach podwójnych. Wartości można wprowadzać bez cudzysłowów. Klauzule można łączyć przy użyciu &
nawiasów (AND
), ||
(OR
), !
(NOT
) i nawiasów.
W przypadku warunku filtru określ, dla których urządzeń, procesów lub wątków są wyświetlane dane wyjściowe.
Lista wyrażeń filtru:
MachineName
= "name"ProcessId
= wartośćProcessName
= "name"ThreadId
= wartośćThreadName
= "name"
Ujmij ciągi (takie jak nazwy) w cudzysłowach podwójnych. Wartości można wprowadzać bez cudzysłowów. Klauzule można łączyć przy użyciu &
nawiasów (AND
), ||
(OR
), !
(NOT
) i nawiasów.
Kwestie wymagające rozważenia
Punkty śledzenia są przeznaczone do debugowania czystszego i bardziej płynnego środowiska. Istnieją pewne zagadnienia, o których należy pamiętać, jeśli chodzi o ich używanie.
Czasami podczas inspekcji właściwości lub atrybutu obiektu jego wartość może ulec zmianie. Jeśli wartość zmienia się podczas inspekcji, nie jest to usterka spowodowana samą funkcją punktu śledzenia. Jednak używanie punktów śledzenia do inspekcji obiektów nie pozwala uniknąć tych przypadkowych modyfikacji.
Sposób, w jaki wyrażenia są oceniane w polu komunikatu Akcja , może być inny niż język, którego obecnie używasz do programowania. Na przykład, aby wygenerować ciąg, nie musisz opakowywać komunikatu w cudzysłowie, nawet jeśli zwykle używasz polecenia Debug.WriteLine()
lub console.log()
. Ponadto składnia nawiasu klamrowego ({ }
) do wyrażeń wyjściowych może być również inna niż konwencja wyprowadzania wartości w języku programowania. (Jednak zawartość w nawiasach klamrowych ({ }
) powinna być nadal zapisywana przy użyciu składni języka deweloperskiego.
Jeśli próbujesz debugować aplikację na żywo i szukasz podobnej funkcji, zapoznaj się z naszą funkcją punktu dziennika w debugerze migawki. Debuger migawek to narzędzie służące do badania problemów w aplikacjach produkcyjnych. Punkty dziennika umożliwiają również wysyłanie komunikatów do okna danych wyjściowych bez konieczności modyfikowania kodu źródłowego i nie mają wpływu na uruchomioną aplikację. Aby uzyskać więcej informacji, zobacz Debugowanie aktywnej aplikacji platformy Azure.