Udostępnij przez


Debugowanie podróży w czasie — omówienie

Zrzut ekranu przedstawiający logo debugowania podróży w czasie z zegarem.

Co to jest debugowanie podróży w czasie?

Debugowanie podróży w czasie (TTD) to narzędzie, które przechwytuje ślad procesu podczas wykonywania i odtwarzania go później zarówno do przodu, jak i do tyłu. Funkcja TTD pomaga debugować problemy, umożliwiając "przewijanie" sesji debugera, a nie konieczność odtworzenia problemu do momentu znalezienia usterki.

Funkcja TTD pozwala wrócić w czasie, aby lepiej zrozumieć warunki, które prowadzą do usterki i powtarzać ją wielokrotnie, aby dowiedzieć się, jak najlepiej rozwiązać problem.

TTD ma zalety w stosunku do plików zrzutu awaryjnego, które często pomijają stan i ścieżkę wykonywania, która doprowadziła do ostatecznego niepowodzenia.

Jeśli nie możesz samodzielnie ustalić problemu, możesz udostępnić ślad współpracownikowi, aby mógł dokładnie przyjrzeć się temu, na co patrzysz. Ta funkcja ułatwia współpracę bardziej niż debugowanie na żywo, ponieważ zarejestrowane instrukcje są takie same, natomiast lokalizacje adresów i wykonywanie kodu różnią się na różnych PC-tach. Możesz również udostępnić konkretny punkt w czasie, aby ułatwić współpracownikowi ustalenie, gdzie zacząć.

Funkcja TTD jest wydajna i działa w celu dodania jak najmniejszego nakładu pracy, ponieważ przechwytuje wykonywanie kodu w plikach śledzenia.

TTD zawiera zestaw obiektów modelu danych debugera, których można użyć do wykonywania zapytań dotyczących śledzenia za pomocą LINQ. Na przykład można użyć obiektów TTD, aby zlokalizować, kiedy został załadowany określony moduł kodu lub zlokalizować wszystkie wyjątki.

Zrzut ekranu narzędzia WinDbg z poleceniem Time Travel Debugging i trzema osiami czasu.

Wymagania

Debugowanie podróży w czasie jest zintegrowane z windbg, zapewniając bezproblemowe rejestrowanie i odtwarzanie.

Aby użyć TTD, należy uruchomić debuger z podwyższonym poziomem uprawnień. Zainstaluj usługę WinDbg przy użyciu konta z uprawnieniami administratora i użyj tego konta podczas rejestrowania w debugerze. Aby uruchomić debuger z podwyższonym poziomem uprawnień, wybierz i przytrzymaj (lub kliknij prawym przyciskiem myszy) ikonę WinDbg w menu Start, a następnie wybierz pozycję Więcej > Uruchom jako administrator.

Informacje o wydaniu

TTD nadal ewoluuje. Aby uzyskać najnowsze informacje, zobacz Informacje o wersji debugowania podróży w czasie.

Utworzony plik śledzenia zawierający nagranie może zawierać dane osobowe lub powiązane z zabezpieczeniami, w tym niekoniecznie ograniczone do ścieżek plików, rejestru, pamięci lub zawartości pliku. Dokładne informacje zależą od docelowego działania procesu podczas rejestrowania. Należy pamiętać o tym podczas udostępniania plików nagrywania innym osobom.

narzędzie do rejestrowania wiersza polecenia TTD.exe

Oprócz rejestrowania śladów w interfejsie użytkownika WinDbg, dostępne jest narzędzie wiersza poleceń o nazwie TTD.exe do rejestrowania śladów.

Mogą istnieć scenariusze, w których wymagany jest tylko rejestrator wiersza polecenia TTD: rejestrowanie na komputerze bez instalowania debugera, zaawansowanych scenariuszy nagrywania, automatyzacji testów itp. W tych scenariuszach można zainstalować tylko rejestrator wiersza polecenia TTD za pomocą adresu URL. Aby uzyskać więcej informacji, zobacz narzędzie wiersza polecenia TTD.exe - Debugowanie podróży w czasie.

Porównanie narzędzi debugowania

Ta tabela zawiera podsumowanie zalet i wad różnych dostępnych rozwiązań debugowania.

Metoda Zalety Minusy
Debugowanie na żywo Środowisko interaktywne, widzi przepływ wykonywania, może zmienić stan docelowy, znane narzędzie w znanym ustawieniu. Zakłóca działanie środowiska użytkownika, może wymagać wysiłku w celu wielokrotnego odtworzenia problemu, może mieć wpływ na bezpieczeństwo, a nie zawsze opcję w systemach produkcyjnych. Przy odtwarzaniu problemu trudno jest cofać się od punktu awarii, aby ustalić przyczynę.
Wysypiska Bez konieczności wstępnego kodowania, niskoinwazyjne, na podstawie wyzwalaczy. Kolejne zrzuty migawki lub zrzuty na żywo zapewniają prosty widok na przestrzeni czasu. Obciążenie jest zasadniczo zerowe, jeśli nie jest używane.
Telemetria i dzienniki Uproszczone, często powiązane ze scenariuszami biznesowymi/akcjami użytkownika, przyjazne dla uczenia maszynowego. Problemy występują w nieoczekiwanych ścieżkach kodu (bez telemetrii). Brak głębokości danych, statycznie skompilowanych w kod źródłowy.
Debugowanie podróży w czasie (TTD) Doskonale sprawdza się w przypadku złożonych usterek, bez kodowania z góry, debugowania powtarzalnego w trybie offline, przyjaznego dla analizy, przechwytywania wszystkiego. Duże obciążenie w rekordowym czasie. Może zebrać więcej potrzebnych danych. Pliki danych mogą stać się duże.

Szkolenie wideo

Aby dowiedzieć się więcej na temat TTD, zobacz te filmy wideo.

Defrag Tools 185 — Ivette i JamesP omawiają podstawy TTD i demonstracja niektórych funkcji w WinDbg

Defrag Tools 186 — Jordi i JCAB prezentują więcej świetnych funkcji TTD w WinDbg

CppCon (YouTube) — Jordi, Ken i JamesM przedstawili TTD w WinDbg na CppCon 2017

Podstawy pliku śledzenia

Rozmiar pliku śledzenia

Plik śledzenia może być duży. Musisz upewnić się, że jest wystarczająca ilość wolnego miejsca. Jeśli zarejestrujesz program nawet przez kilka minut, pliki śledzenia mogą szybko wzrosnąć do kilku gigabajtów. TTD nie ustala maksymalnego rozmiaru plików śledzenia, aby umożliwić złożone, długotrwałe scenariusze. Szybkie odtworzenie problemu powoduje, że rozmiar pliku śledzenia pozostaje możliwie mały.

Pliki śledzenia i indeksowania

Plik śledzenia (.run) przechowuje wykonywanie kodu podczas nagrywania.

Po zatrzymaniu nagrywania system tworzy plik indeksu (.idx), aby zoptymalizować dostęp do informacji śledzenia. WinDbg również automatycznie tworzy pliki indeksu po otwarciu plików śledzenia.

Pliki indeksu mogą być duże, zazwyczaj dwa razy większe niż plik śledzenia.

Możesz ponownie utworzyć plik indeksu z pliku śledzenia przy użyciu !tt.index polecenia .

0:000> !tt.index
Successfully created the index in 10ms.

Rejestrowanie błędów i inne wyniki nagrywania przechodzą do pliku dziennika WinDbg.

Wszystkie pliki wyjściowe są przechowywane w skonfigurowanej lokalizacji. Domyślna lokalizacja znajduje się w folderze dokumentów użytkownika. Na przykład w przypadku użytkownika User1 pliki TTD są przechowywane tutaj:

C:\Users\User1\Documents

Aby uzyskać więcej informacji na temat pracy z plikami śledzenia, zobacz Debugowanie podróży w czasie — praca z plikami śledzenia.

Rzeczy, na które należy uważać

Niezgodności antywirusowe

Możesz napotkać niekompatybilności z powodu sposobu, w jaki TTD integruje się z procesami w celu ich rejestrowania. Zazwyczaj występują problemy z oprogramowaniem antywirusowym lub innym oprogramowaniem systemowym, które próbuje śledzić i monitorować wywołania pamięci systemu. Jeśli wystąpią problemy z rejestrowaniem, takie jak niewystarczający komunikat o uprawnieniach, spróbuj tymczasowo wyłączyć dowolne oprogramowanie antywirusowe.

Inne narzędzia, które próbują zablokować dostęp do pamięci, mogą być również problematyczne. Na przykład zestaw narzędzi Microsoft Enhanced Mitigation Experience Toolkit.

Innym przykładem środowiska, które powoduje konflikt z TTD, jest struktura aplikacji Electron. W takim przypadku ślad może być rejestrowany, ale istnieje również możliwość zakleszczenia lub awarii procesu, który jest rejestrowany.

Tylko tryb użytkownika

TTD obecnie obsługuje tylko tryb użytkownika, więc nie można śledzić procesów w trybie jądra.

Odtwarzanie tylko do odczytu

Możesz podróżować z powrotem w czasie, ale nie można zmienić historii. Można użyć poleceń odczytu pamięci, ale nie można używać poleceń modyfikujących lub zapisujących w pamięci.

Procesy chronione przez system

Niektóre procesy chronione przez system Windows, takie jak proces PPL (Protected Process Light), są chronione. TTD nie może przenieść się do chronionego procesu, aby umożliwić rejestrowanie wykonywania kodu.

Wpływ rejestrowania na wydajność

Rejestrowanie aplikacji lub procesu ma wpływ na wydajność komputera. Rzeczywiste obciążenie związane z wydajnością zależy od ilości i typu kodu wykonywanego podczas nagrywania. W typowych scenariuszach nagrywania można spodziewać się spadku wydajności o około 10x-20x. Czasami nie ma zauważalnego spowolnienia w interfejsie użytkownika. Jednak w przypadku bardziej intensywnie korzystających z zasobów operacji, takich jak okno dialogowe Otwieranie pliku, widać wpływ rejestrowania.

Błędy pliku śledzenia

Mogą wystąpić błędy pliku śledzenia. Aby uzyskać więcej informacji, zobacz Debugowanie podróży w czasie — rozwiązywanie problemów.

Zaawansowane funkcje debugowania podróży w czasie

Oś czasu

Osie czasu to wizualna reprezentacja zdarzeń występujących podczas wykonywania. Te zdarzenia mogą być lokalizacjami: punktów przerwania, odczytu/zapisu pamięci, wywołań funkcji i zwracań oraz wyjątków. Aby uzyskać więcej informacji na temat osi czasu, zobacz WinDbg — osie czasu.

Obsługa modelu danych debugera

  • Wbudowana obsługa modelu danych — TTD obejmuje obsługę modelu danych. Używanie zapytań LINQ do analizowania błędów aplikacji może być zaawansowanym narzędziem. Możesz użyć okna modelu danych w systemie WinDbg, aby pracować z rozszerzalną i przeglądalną wersją dx i dx -g, co umożliwia tworzenie tabel za pomocą NatVis, JavaScript i zapytań LINQ.

Aby uzyskać ogólne informacje na temat modelu danych debugera, zobacz WinDbg — model danych. Aby uzyskać informacje na temat pracy z modelem obiektów debugera TTD, zobacz Debugowanie podróży w czasie — wprowadzenie do obiektów debugowania podróży czasowej.

Obsługa skryptów

Aby uzyskać ogólne informacje na temat pracy z językami JavaScript i NatVis, zobacz WinDbg — scripting( WinDbg — skrypty).

narzędzie wiersza polecenia TTD.exe

Dostępne jest narzędzie wiersza polecenia TTD.exe do rejestrowania śladów. Aby uzyskać więcej informacji, zobacz narzędzie wiersza polecenia TTD.exe - Debugowanie podróży w czasie.

Obsługa kodu zarządzanego z TTD

Można użyć rozszerzenia debugowania SOS (sos.dll) działającego w trybie 64-bitowym, aby debugować kod zarządzany przy użyciu funkcji TTD w usłudze WinDbg. Aby uzyskać więcej informacji, zobacz Debugowanie kodu zarządzanego przy użyciu debugera systemu Windows.

Wprowadzenie do usługi TTD

Zacznij tutaj

Jeśli dopiero zaczynasz korzystać z usługi TTD, postępuj zgodnie z tą ścieżką szkoleniową:

  1. Rejestrowanie śledzenia — przechwytywanie pierwszego śledzenia wykonania
  2. Powtarzanie śledzenia — nawigowanie i analizowanie nagrania
  3. Przykładowy przewodnik po aplikacji — przykład debugowania krok po kroku

Potrzebujesz pomocy?

Zaawansowane funkcje