Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano, kiedy i jak używać narzędzia wiersza polecenia TTD.exe do rejestrowania śladów Debugowania Podróży w Czasie (TTD). Narzędzie wiersza polecenia TTD.exe umożliwia rejestrowanie wykonania aplikacji lub procesów, zapisywanie tego w pliku śledzenia oraz odtwarzanie w WinDbg w celu diagnozowania problemów z wykonywaniem kodu.
Z tego artykułu dowiesz się:
- Kiedy należy używać TTD.exe versus interfejs użytkownika WinDbg
- Jak zainstalować i skonfigurować TTD.exe
- Trzy sposoby rejestrowania śladów (uruchamianie, dołączanie, monitorowanie)
- Opcje wiersza polecenia i zaawansowane scenariusze
Kiedy należy użyć narzędzia wiersza polecenia TTD.exe
Debugowanie podróży w czasie (TTD) umożliwia zarejestrowanie wykonywania kodu aplikacji lub procesu i zapisanie go w pliku śledzenia. Możesz odtworzyć plik w debugerze systemu Windows, aby zlokalizować problem z wykonywaniem kodu.
W wielu scenariuszach najprostszym sposobem używania TTD do rejestrowania aplikacji lub procesu jest bezpośrednio z interfejsu użytkownika usługi WinDbg. Jeśli jesteś nowy w debugowaniu w podróży w czasie, zacznij od Debugowanie w podróży w czasie - Omówienie , aby poznać podstawy korzystania z interfejsu WinDbg.
Mogą istnieć scenariusze, w których potrzebny jest tylko rejestrator wiersza polecenia TTD: rejestrowanie na komputerze bez instalowania debugera, zaawansowanych scenariuszy nagrywania, automatyzacji testów itd. W tych scenariuszach można zainstalować tylko rejestrator wiersza polecenia TTD za pomocą adresu URL.
Nagrywanie TTD ma wpływ na zarejestrowany proces
Nagrywanie TTD jest inwazyjną technologią. Możesz zaobserwować od 5x do 20x lub nawet więcej spowolnienia uruchomionej aplikacji lub procesu podczas nagrywania sesji, w zależności od aplikacji oraz wybranych opcji nagrywania.
Utworzone pliki śledzenia rosną wraz z upływem czasu i mogą zająć dużo miejsca do magazynowania. Pracuj, aby śledzić przez najkrótszy możliwy czas, rejestrując aktywność programu, a potem zakończ śledzenie tak szybko, jak to możliwe.
Po tym jak TTD podłączy się do procesu, nie może się odłączyć. Zamknij aplikację lub zakończ proces po zakończeniu rejestrowania TTD. W przypadku procesów krytycznych dla systemu ta akcja wymaga ponownego uruchomienia systemu operacyjnego.
Nagrania TTD mogą zawierać dane osobowe lub powiązane z zabezpieczeniami
Ważne
Nagrania TTD przechwytują zawartość pamięci i mogą 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.
Pobierz i zainstaluj narzędzie wiersza polecenia TTD.exe (preferowana metoda)
Pobierz narzędzie wiersza polecenia TTD z witryny https://aka.ms/ttd/download.
Wybierz Zainstaluj, a TTD zostanie pobrany i zainstalowany. Polecenie TTD jest dodawane do ścieżki systemowej i jest dostępne do użycia w wierszu polecenia po zakończeniu instalacji.
Wskazówka
Po zakończeniu instalacji otwórz nowy wiersz polecenia i wpisz polecenie ttd.exe -help , aby sprawdzić, czy instalacja zakończyła się pomyślnie.
Jeśli wystąpią problemy z instalacją, zobacz Rozwiązywanie problemów z instalacją pliku Instalatora aplikacji.
Na niektórych komputerach może być konieczne zainstalowanie Instalatora aplikacji firmy Microsoft dla systemu Windows 10. Jest ona dostępna w aplikacji ze Sklepu Microsoft w systemie Windows. Menedżer pakietów systemu Windows jest obsługiwany za pośrednictwem Instalatora aplikacji, począwszy od systemu Windows 10 1809.
Pobierz i zainstaluj narzędzie wiersza polecenia TTD.exe (metoda offline)
Chociaż preferowaną metodą instalacji jest użycie Instalatora aplikacji, można również pobrać pakiet wiersza polecenia TTD i wyodrębnić pliki ręcznie. Oto dwa sposoby, aby to zrobić.
Wyodrębnianie plików z zainstalowanego narzędzia wiersza polecenia TTD.exe
Jeśli narzędzie wiersza polecenia TTD jest już zainstalowane, możesz wyodrębnić pliki z zainstalowanej lokalizacji. W programie PowerShell uruchom następujące polecenie, aby znaleźć zainstalowaną lokalizację:
(Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation
Z tego miejsca można skopiować wszystkie pliki binarne (*.dll, *.exe, *.sys) do nowej lokalizacji. Oto jeden ze sposobów, aby to zrobić w programie PowerShell:
robocopy.exe (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation c:\myttd *.exe *.dll *.sys /E /XD AppxMetadata
Zastąp ciąg "c:\myttd" wybranym miejscem docelowym. Wynik wygląda mniej więcej tak (na maszynie x64):
ls -Recurse c:\myttd
Directory: C:\myttd
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 11/9/2023 2:43 PM x86
-a--- 11/9/2023 2:43 PM 79240 ProcLaunchMon.sys
-a--- 11/9/2023 2:43 PM 112568 TTD.exe
-a--- 11/9/2023 2:43 PM 309176 TTDInject.exe
-a--- 11/9/2023 2:43 PM 55328 TTDLoader.dll
-a--- 11/9/2023 2:43 PM 821176 TTDRecord.dll
-a--- 11/9/2023 2:43 PM 1222584 TTDRecordCPU.dll
-a--- 11/9/2023 2:43 PM 63416 TTDRecordUI.dll
Directory: C:\myttd\x86
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 11/9/2023 2:43 PM 247728 TTDInject.exe
-a--- 11/9/2023 2:43 PM 42928 TTDLoader.dll
-a--- 11/9/2023 2:43 PM 1128480 TTDRecordCPU.dll
Należy pamiętać, że pliki binarne x86 znajdują się w podkatalogu. Jeśli nie musisz rejestrować procesów 32-bitowych, możesz usunąć ten folder (i dodać /xd x86 go do polecenia robocopy, aby uniknąć kopiowania go w pierwszej kolejności). Wersja ARM64 nie ma żadnych podkatalogów.
Plik TTDRecordUI.dll jest wymagany tylko wtedy, gdy chcesz użyć interfejsu użytkownika do kontrolowania nagrywania. Jeśli nie chcesz interfejsu użytkownika, możesz usunąć ten plik.
Pobierz i ręcznie wyodrębnij pakiet narzędzia wiersza polecenia TTD.exe
Jeśli nie chcesz instalować narzędzia wiersza polecenia TTD, możesz pobrać pakiet i wyodrębnić pliki ręcznie. Następujący skrypt programu PowerShell:
- Pobiera adres URL bieżącej wersji TTD z .https://aka.ms/ttd/download
- Pobiera pakiet MSIX.
- Wyodrębnia żądaną architekturę MSIX z pakietu MSIX.
- Wyodrębnia pliki binarne TTD z pliku MSIX.
param(
$OutDir = ".",
[ValidateSet("x64", "x86", "arm64")]
$Arch = "x64"
)
# Ensure the output directory exists
if (!(Test-Path $OutDir)) {
$null = mkdir $OutDir
}
# Ensure the temp directory exists
$TempDir = Join-Path $OutDir "TempTtd"
if (!(Test-Path $TempDir)) {
$null = mkdir $TempDir
}
# Determine if the destination already contains binaries
$extensions = @('.dll', '.exe', '.sys')
$existingBinaries = (Get-ChildItem -recurse $OutDir | Where-Object Extension -In $extensions).Count -gt 0
# Download the appinstaller to find the current uri for the msixbundle
Invoke-WebRequest https://aka.ms/ttd/download -OutFile $TempDir\ttd.appinstaller
# Download the msixbundle
$msixBundleUri = ([xml](Get-Content $TempDir\ttd.appinstaller)).AppInstaller.MainBundle.Uri
if ($PSVersionTable.PSVersion.Major -lt 6) {
# This is a workaround to get better performance on older versions of PowerShell
$ProgressPreference = 'SilentlyContinue'
}
# Download the msixbundle (but name as zip for older versions of Expand-Archive)
Invoke-WebRequest $msixBundleUri -OutFile $TempDir\ttd.zip
# Extract the 3 msix files (plus other files)
Expand-Archive -DestinationPath $TempDir\UnzippedBundle $TempDir\ttd.zip -Force
# Expand the build you want - also renaming the msix to zip for Windows PowerShell
$fileName = switch ($Arch) {
"x64" { "TTD-x64" }
"x86" { "TTD-x86" }
"arm64" { "TTD-ARM64" }
}
# Rename msix (for older versions of Expand-Archive) and extract the debugger
Rename-Item "$TempDir\UnzippedBundle\$fileName.msix" "$fileName.zip"
Expand-Archive -DestinationPath "$OutDir" "$TempDir\UnzippedBundle\$fileName.zip"
# Delete the temp directory
Remove-Item $TempDir -Recurse -Force
# Remove unnecessary files, if it is safe to do so
if (-not $existingBinaries) {
Get-ChildItem -Recurse -File $OutDir |
Where-Object Extension -NotIn $extensions |
Remove-Item -Force
Remove-Item -Recurse -Force (Join-Path $OutDir "AppxMetadata")
} else {
Write-Host "Detected pre-existing binaries in '$OutDir' so did not remove any files from TTD package."
}
Zakładając, że zapiszesz powyższy skrypt jako Get-Ttd.ps1, uruchom go w następujący sposób, aby pobrać pliki binarne x64 do katalogu c:\myttd:
md c:\myttd
cd c:\myttd
.\Get-Ttd.ps1
Możesz też określić katalog wyjściowy i architekturę:
.\Get-Ttd.ps1 -OutDir c:\myttd-arm64 -Arch arm64
Zastąp ciąg "c:\myttd" lub "c:\myttd-arm64" wybranym miejscem docelowym.
Nagraj śledzenie za pomocą narzędzia wiersza poleceń TTD.exe
Ślad można zarejestrować na trzy sposoby:
| Metoda | Najlepsze dla | Przykładowy scenariusz |
|---|---|---|
| Uruchomić | Uruchamianie nowego procesu z określonymi argumentami | Rejestrowanie narzędzia wiersza polecenia, takiego jak ping.exe |
| Dołączyć | Rejestrowanie już uruchomionego procesu | Debugowanie usługi lub długotrwałej aplikacji |
| Monitor | Automatyczne rejestrowanie przy każdym uruchomieniu procesu | Przechwytywanie sporadycznych problemów lub problemów z uruchamianiem |
Po rozpoczęciu rejestrowania procesu zainicjuj problem, który chcesz rozwiązać. Możesz otworzyć problematyczny plik lub wybrać określony przycisk w aplikacji, aby spowodować zdarzenie wzbudzające zainteresowanie. Gdy aplikacja, którą nagrywasz, kończy się w naturalny sposób lub przez awarię, plik śledzenia zostanie sfinalizowany.
Wskazówka
Rejestrowanie śladów TTD wymaga uprawnień administracyjnych. Zazwyczaj uruchamiasz ttd.exe z poziomu wiersza polecenia administratora.
Aby uzyskać więcej informacji na temat rejestrowania śledzenia podróży w czasie przy użyciu usługi WinDbg, zobacz Debugowanie podróży w czasie — rejestrowanie śladu.
Uruchamianie procesu
-launch <Program> [<arguments>]
Uruchom i śledź program (tryb domyślny).
Ten tryb jest jedynym trybem, który umożliwia przekazywanie argumentów do programu. Program jest uruchamiany z tymi samymi uprawnieniami co TTD.exe (jako administrator). Użyj -attach lub -monitor, aby zarejestrować program z normalnym zestawem uprawnień.
Dołączenie -launch jest opcjonalne, ale można go użyć w celu zapewnienia przejrzystości.
Pierwszy nierozpoznany argument, który nie zaczyna się od - lub / zakłada się, że jest ścieżką wykonywalną do uruchomienia, a wszelkie kolejne argumenty są zakładane jako argumenty dla tego programu.
Na przykład użyj polecenia TTD.exe notepad.exe , aby uruchomić i zarejestrować Notatnik. Ślad zatrzymuje się po zamknięciu Notatnika.
Przykład użycia można znaleźć w temacie przykłady użycia scenariusza — rejestrowanie procesu.
Dołącz do procesu
-attach <PID>
Dołącz do uruchomionego procesu określonego przez identyfikator procesu. Użyj Menedżera zadań lub narzędzia TaskList, aby zidentyfikować numery procesów. Aby uzyskać więcej informacji, zobacz Znajdowanie identyfikatora procesu.
Na przykład użyj polecenia TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run , aby uruchomić i zarejestrować proces o identyfikatorze 21440 i zapisać ślad w pliku MyTraceFile.run.
Przed uruchomieniem TTD.exeupewnij się, że katalog istnieje (C:\traces w tym przykładzie).
Przykład użycia można znaleźć w sekcji Scenariusz – Lokalizowanie i dołączanie do uruchomionego procesu.
Monitorowanie procesu
-monitor <Program>
Opcja monitora umożliwia monitorowanie i śledzenie programu przy każdym uruchomieniu. Aby użyć tej opcji, należy określić pełną ścieżkę do lokalizacji wyjściowej z -out.
Aby zatrzymać monitorowanie, naciśnij Ctrl+C.
Główne zalety monitorowania w porównaniu z innymi metodami są następujące:
- Możesz uruchomić aplikację docelową w normalny sposób. Nie trzeba ustalić wiersza polecenia, aby ją uruchomić.
- Aplikacja docelowa działa z normalnymi uprawnieniami. Jeśli uruchamiasz aplikację bezpośrednio z ttd.exe, zostanie ona uruchomiona z podwyższonym poziomem uprawnień i ta zmiana może mieć wpływ na zachowanie programu.
- Jest to przydatne w przypadku automatyzacji (użyj skryptu, który monitoruje uruchamianie programu i zbiera ślad).
Można określić opcję -monitor więcej niż raz, aby monitorować wiele programów.
Zobacz na przykład przykłady użycia scenariusza — procesy monitorowania.
Opcje wiersza polecenia
Składnia
TTD.exe [options] [mode] [program [<arguments>]]
-? | -help
Wyświetl pomoc wiersza polecenia.
Tryby
-launch <Program> [<arguments>]
Uruchom i śledź program (tryb domyślny).
Ten tryb jest jedynym trybem, który umożliwia przekazywanie argumentów do programu. Opcja -launch musi być ostatnią opcją TTD w wierszu polecenia i po niej należy podać program do uruchomienia oraz wszelkie argumenty wymagane przez program. Jeśli nie określisz trybu, narzędzie traktuje je jako uruchomienie. Na przykład TTD.exe -out C:\traces ping.exe msn.com jest traktowane jako uruchomienie.
-attach <PID>
Dołącz do uruchomionego procesu określonego przez identyfikator procesu. Użyj narzędzia Menedżer zadań lub TaskList, aby zidentyfikować identyfikatory procesów. Aby uzyskać więcej informacji, zobacz Znajdowanie identyfikatora procesu.
-monitor <Program>
Śledzenie programów lub usług za każdym razem, gdy są uruchamiane (aż do ponownego uruchomienia). Aby użyć tej opcji, należy określić pełną ścieżkę do lokalizacji wyjściowej z -out.
Podstawowe opcje wiersza polecenia
-out <path>
Określ nazwę pliku śledzenia lub katalog. Jeśli określisz katalog, musi już istnieć. Jeśli określisz nazwę pliku, nazwa pliku nie może istnieć.
-noUI
Wyłącza interfejs użytkownika na potrzeby ręcznej kontroli nad rejestrowaniem. Użyj tej opcji w scenariuszach automatyzacji , w których nie potrzebujesz interaktywnej kontroli.
Jeśli nie wybierzesz tej opcji, podczas nagrywania zostanie wyświetlony mały interfejs użytkownika:
Interfejs użytkownika udostępnia dwie kontrolki:
- Śledzenie wyłączone — zatrzymuje śledzenie, a aplikacja kontynuuje działanie
- Zamknij aplikację — zamyka aplikację i zatrzymuje śledzenie
-accepteula
Użyj tej opcji, aby zaakceptować umowę licencyjną użytkownika EULA. Użyj tej opcji w scenariuszach automatyzacji po przejrzeniu i zaakceptowaniu umowy EULA.
TTD wyświetla EULA po raz pierwszy, gdy jest uruchamiany. Wpisz Y lub N, aby zaakceptować eula. Po zaakceptowaniu umowa EULA nie pojawia się już podczas uruchamiania. Jeśli nie akceptujesz umowy EULA, TTD kończy działanie i wyświetla EULA przy następnym uruchomieniu.
Kontrolka śledzenia
-stop <process name> | <PID> | all
Zatrzymaj śledzenie określonej nazwy procesu, PID lub "wszystkie".
-wait <timeout>
Poczekaj maksymalnie określoną liczbę sekund na zakończenie wszystkich sesji śledzenia w systemie. Aby czekać w nieskończoność, określ -1.
-tracingOff
Uruchamia aplikację z wyłączonym rejestrowaniem śledzenia. Możesz użyć pola wyboru interfejsu użytkownika, aby ponownie włączyć śledzenie po jego wyłączeniu.
Dodatkowe opcje wiersza polecenia
-children
Zarejestruj proces docelowy i wszystkie procesy utworzone przez obiekt docelowy. Każdy proces podrzędny jest rejestrowany we własnym pliku śledzenia.
-cmdLineFilter "<string>"
Zarejestruj proces docelowy, jeśli jego wiersz polecenia zawiera ciąg. Ta opcja działa tylko w trybie -monitor. Jest to przydatne, gdy argument wiersza polecenia jednoznacznie identyfikuje interesujący Cię proces. Na przykład -monitor notepad.exe -cmdLineFilter "specialfile.txt" zapisuje notepad.exe tylko wtedy, gdy specialfile.txt pojawi się w wierszu polecenia.
-cleanup
Odinstalowywanie sterownika monitora procesów.
Ustawienia śledzenia zachowania
-timestampFilename
Dodaje znacznik czasu do ostatniej części nazwy pliku śledzenia. Na przykład ping_2023-06-17_103116.run.
Aby nagrać ping.exe z sygnaturą czasową w nazwie pliku, użyj tego polecenia.
ttd.exe -out c:\traces -timestampFilename ping.exe msn.com
Domyślnie rejestrator sekwencyjnie skanuje katalog wyjściowy, aby znaleźć nieużywaną nazwę pliku. Jeśli nagrywasz ping.exe, rejestrator próbuje ping01.run, ping02.run i tak dalej, dopóki nie znajdzie nieużywanej nazwy pliku. W większości scenariuszy ta metoda nazewnictwa jest wystarczająca. Jeśli jednak chcesz zarejestrować ten sam program wiele razy, domyślny algorytm nazewnictwa plików może stać się nieefektywny, gdy istnieje duża liczba istniejących plików.
-ring
Śledzenie do buforu pierścieniowego. Rozmiar pliku nie przekracza limitów określonych przez -maxFile. Zapisywana jest tylko ostatnia część nagrania, która mieści się w danym rozmiarze.
-maxFile <size>
Maksymalny rozmiar pliku śledzenia w MB. W trybie pełnego śledzenia wartość domyślna to 1024 GB, a minimalna wartość to 1 MB. W trybie buforu pierścieniowego wartość domyślna to 2048 MB, minimalna wartość to 1 MB, a maksymalna wartość to 32 768 MB.
Domyślnym ustawieniem pierścienia w pamięci w procesach 32-bitowych jest 256 MB.
-maxConcurrentRecordings <count>
Maksymalna liczba nagrań, które mogą być prowadzone jednocześnie. Jeśli nie określisz tej wartości, może wystąpić nieograniczona liczba nagrań jednocześnie.
-numVCpu <number>
Określa liczbę wirtualnych procesorów CPU do zarezerwowania i użycia podczas śledzenia. Ta wartość wpływa na całkowite narzuty pamięciowe narzucone na pamięć procesu gościa przez TTD. Jeśli nie określisz tej wartości, wartość domyślna dla platformy to 55 dla x64/ARM64 i 32 dla x86.
Zmień to ustawienie, aby ograniczyć wpływ pamięci tylko wtedy, gdy zabraknie pamięci. Obniżenie numVCpu wartości może poważnie wpłynąć na wydajność śledzenia i powinno być wykonywane tylko w celu obejścia problemów z użyciem pamięci.
Jeśli TTD.exe nie uda się zarejestrować lub plik .out wskazuje na symulację trwającą 0 sekund, użycie -numVCpu może umożliwić pomyślne zarejestrowanie.
-replayCpuSupport <support>
Określa obsługę oczekiwaną od procesorów, które odtwarzają ślad. Ustawienie domyślne jest zalecane w celu przenoszenia śladów między maszynami, ale można użyć innych opcji do tworzenia mniejszych plików śledzenia i rejestrowania szybciej, w zależności od konkretnych instrukcji używanych przez program docelowy.
<support> wartości
| Wartość | Opis |
|---|---|
Default |
Domyślna obsługa CPU wymaga jedynie podstawowej, powszechnie dostępnej obsługi w procesorze odtwarzania. |
MostConservative |
Nie wymaga specjalnej obsługi CPU do odtwarzania. Odpowiedni dla śladów, które są odtwarzane na zupełnie innej architekturze procesora, jak ślad na procesorze Intel na procesorze ARM64. |
MostAggressive |
Przyjęto założenie, że procesor replay jest podobny i równy lub większy niż procesor używany do rejestrowania. |
IntelAvxRequired |
Przyjęto założenie, że procesor replay jest procesorem Intel/AMD 64-bitowym obsługującym procesor AVX. |
IntelAvx2Required |
Przyjęto założenie, że procesor replay jest procesorem Intel/AMD 64-bitowym obsługującym procesor AVX2. |
Zmniejszenie nakładu pracy związanego z śledzeniem
Chociaż TTD jest bardzo wydajny w tym, co robi (pełne śledzenie na poziomie instrukcji zakodowane średnio w mniej niż jeden bajt na instrukcję), nadal powoduje zauważalne obciążenie podczas nagrywania. Nowoczesne procesory CPU mogą wykonywać miliardy instrukcji na sekundę, co sprawia, że nawet jeden bajt/instrukcja jest kosztowna. W wielu przypadkach rejestrowanie całego procesu nie jest konieczne.
Następujące opcje mogą służyć do zmniejszenia nakładu pracy związanego z śledzeniem:
-module <module name>
Rejestruj tylko określony moduł (na przykład comdlg32.dll) i kod, który wywołuje. Może to być plik wykonywalny lub dowolna biblioteka DLL załadowana przez plik wykonywalny. Tę opcję można określić więcej niż raz, aby zarejestrować wiele modułów.
Gdy ta opcja jest używana, proces docelowy jest uruchamiany z pełną szybkością do momentu wykonania kodu w określonych modułach. Funkcja TTD zarejestruje proces aż do momentu opuszczenia określonych modułów, po czym nagrywanie zostaje wyłączone, a cel powraca do pełnej prędkości. Ponieważ włączanie/wyłączanie nagrywania jest kosztowne, TTD pozostawi nagrywanie włączone, gdy określony moduł wywołuje inne moduły w procesie.
-recordmode <Automatic | Manual>
Zwykle nagrywanie rozpoczyna się, gdy tylko TTD wstrzyknie się w docelowy proces ("Automatyczny" tryb, wartość domyślna). Jeśli Twój program korzysta z interfejsu API nagrywania w procesie TTD, aby kontrolować, kiedy ma zostać rozpoczęte nagrywanie, możesz użyć trybu "Ręczny", aby działać z pełną prędkością do momentu, gdy program wywoła API do rozpoczęcia nagrywania.
Użycie tych opcji może spowodować znaczne zmniejszenie nakładu pracy na rejestrowanie i rozmiar pliku śledzenia. Debugowanie śledzenia zarejestrowanego za pomocą tych opcji nie różni się od śledzenia całego procesu. Za każdym razem, gdy osiągniesz lokalizację w śladzie, w którym nagranie jest wyłączone, następna instrukcja w śladzie jest pierwszą instrukcją wykonywaną podczas wznawiania nagrywania.
Ustawienia związane z zdarzeniami
-passThroughExit
Przekaż kod zakończenia procesu gościa jako kod zakończenia procesu TTD.exe. Ta wartość jest dostępna dla plików wsadowych za pośrednictwem zmiennej %ERRORLEVEL%. Program PowerShell i inne środowiska wiersza polecenia oferują również mechanizmy pobierania wartości zakończenia procesu.
-onInitCompleteEvent <eventName>
Umożliwia zasygnalizowanie zdarzenia po zakończeniu inicjowania śledzenia.
Przykłady użycia scenariuszy — rejestrowanie procesu
Wybierz scenariusz, który odpowiada Twoim potrzebom:
- Uruchamianie i rejestrowanie — zacznij od prostego przykładu Notatnika.
- Uruchom z parametrami — przekaż argumenty do aplikacji.
- Dołączanie do uruchomionego procesu — rejestruj już uruchomioną aplikację.
- Zarejestruj procesy nadrzędne i podrzędne — Przechwytywanie scenariuszy obejmujących wiele procesów.
Scenariusz — uruchamianie i rejestrowanie aplikacji systemu Windows
W tym scenariuszu uruchomisz Notatnik i utworzysz ślad.
-
-launchUżyj opcji , aby uruchomić Notatnik i zarejestrować go.
C:\TTD> TTD.exe -launch notepad.exe
Launching 'notepad.exe'
Recording process (PID:9960) on trace file: C:\TTD\notepad01.run
notepad.exe(x64) (PID:9960): Process exited with exit code 0 after 12984ms
Full trace dumped to C:\TTD\notepad01.run
- Zostanie wyświetlone małe menu aplikacji pokazujące, że śledzenie jest włączone.
- Po zamknięciu aplikacji generuje on plik śledzenia. W tym przykładzie plik śledzenia nosi nazwę notepad01.run.
Scenariusz — uruchamianie i rejestrowanie aplikacji systemu Windows z przekazanym parametrem
W tym scenariuszu uruchomisz polecenie ping i przekażesz adres do tego polecenia jako parametr.
- W tym przykładzie pominięto
-launchopcję, ponieważ jest to tryb domyślny.
C:\TTD> TTD.exe ping.exe msn.com
Launching 'ping.exe msn.com'
Recording process (PID:24044) on trace file: C:\TTD\ping01.run
Pinging msn.com [204.79.197.219] with 32 bytes of data:
Reply from 204.79.197.219: bytes=32 time=22ms TTL=118
Reply from 204.79.197.219: bytes=32 time=21ms TTL=118
Reply from 204.79.197.219: bytes=32 time=25ms TTL=118
Reply from 204.79.197.219: bytes=32 time=21ms TTL=118
Ping statistics for 204.79.197.219:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 21ms, Maximum = 25ms, Average = 22ms
ping.exe(x64) (PID:24044): Process exited with exit code 0 after 3390ms
Full trace dumped to C:\TTD\ping01.run
- Po zamknięciu aplikacji generuje on plik śledzenia. W tym przykładzie plik śledzenia nosi nazwę ping01.run.
Scenariusz — lokalizowanie i dołączanie do uruchomionego procesu
W tym scenariuszu uruchamiasz Notatnik, znajdujesz jego identyfikator procesu i tworzysz ślad, załączając się do uruchomionej aplikacji.
Uruchom aplikację docelową, w tym przykładzie Notatnik.
Użyj właściwości TaskList lub innych metod, aby znaleźć identyfikator procesu. Aby uzyskać więcej informacji, zobacz Znajdowanie identyfikatora procesu.
C:\TTD> TaskList
...
Notepad.exe 21440 Console 1 73,020 K
...
- Użyj identyfikatora procesu z opcją
-attachdo dołączenia i nagrania. Opcjonalnie określ nazwę pliku śledzenia za pomocą polecenia-out.
C:\TTD> TTD.exe -attach 21440 -out C:\TTD\MyTraceFile.run
Attaching to 21440
Recording process (PID:21440) on trace file: C:\TTD\MyTraceFile.run
(x64) (PID:21440): Process exited with exit code 0 after 26672ms
Full trace dumped to C:\TTD\MyTraceFile.run
Scenariusz — rejestrowanie procesu nadrzędnego i procesów podrzędnych
W tym scenariuszu rejestrujesz proces nadrzędny i jego procesy podrzędne. Ponieważ niektóre aplikacje używają wielu procesów podrzędnych, plik śledzenia rodziny zawierający dzieci może stać się dość duży.
- Określ opcję
-childreni nazwę aplikacji nadrzędnej, którą chcesz zarejestrować.
W tym przykładzie rejestruje się uruchamianie cmd.exe jako proces potomny ping.exe.
ttd.exe -out d:\traces -children cmd.exe /C ping.exe msn.com
Microsoft (R) TTD 1.01.11
Release: 1.11.0.0
Copyright (C) Microsoft Corporation. All rights reserved.
Launching 'cmd.exe /C ping.exe msn.com'
Recording process (PID:48200) on trace file: d:\traces\cmd01.run
Recording process (PID:53724) on trace file: d:\traces\PING01.run
Pinging msn.com [204.79.197.219] with 32 bytes of data:
Reply from 204.79.197.219: bytes=32 time=6ms TTL=117
Reply from 204.79.197.219: bytes=32 time=6ms TTL=117
Reply from 204.79.197.219: bytes=32 time=7ms TTL=117
Reply from 204.79.197.219: bytes=32 time=7ms TTL=117
Ping statistics for 204.79.197.219:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 6ms, Maximum = 7ms, Average = 6ms
(x64) (PID:53724): Process exited with exit code 0 after 3516ms
Trace family nesting level is 1; Parent process ID is 48200
Full trace dumped to d:\traces\PING01.run
...
- Tworzone są wiele plików śledzenia: jeden dla procesu nadrzędnego i plik śledzenia dla każdego procesu podrzędnego. WinDbg otwiera jednocześnie tylko jeden plik śledzenia, dlatego należy uruchomić oddzielne wystąpienia WinDbg dla każdego śladu, jeśli chcesz je debugować w tym samym czasie.
Przykłady użycia scenariuszy — procesy monitorowania
Scenariusz — monitorowanie uruchamiania programu i rozpoczynanie rejestrowania
W tym scenariuszu użyj opcji -monitor, aby zarejestrować wszystkie aktualnie uruchomione wystąpienia aplikacji i przyszłe wystąpienia aplikacji notepad.exe do momentu ponownego uruchomienia systemu lub zakończenia ttd.exe za pomocą Ctrl+C. Potrzebujesz opcji -out do monitora, a folder wyjściowy musi już istnieć.
- Monitoruj i śledź bieżące i przyszłe wystąpienia notepad.exe.
C:\TTD> TTD.exe -out C:\TTD\ -monitor notepad.exe
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.
The Process Launch Monitor driver is not installed
Successfully installed the Process Launch Monitor driver
Recording process Notepad.exe(15904) From parent process explorer.exe(8440)
Recording process (PID:15904) on trace file: C:\TTD\notepad01.run
Recording process Notepad.exe(19920) From parent process explorer.exe(8440)
Recording process (PID:19920) on trace file: C:\TTD\notepad02.run
(x64) (PID:19920): Process exited with exit code 0 after 1281ms
Full trace dumped to C:\TTD\notepad02.run
(x64) (PID:15904): Process exited with exit code 0 after 30719ms
Full trace dumped to C:\TTD\notepad01.run
- W tym przykładzie załadujesz dwa wystąpienia notepad.exe po rozpoczęciu śledzenia. Podczas przechwytywania interesującego działania użyj CTRL-C w wierszu polecenia, aby zatrzymać nagrywanie.
Scenariusz — monitorowanie dwóch programów na potrzeby uruchamiania programu
W tym scenariuszu użyj opcji -monitor do monitorowania i rejestrowania dwóch aplikacji.
- Monitoruj i śledź bieżące i przyszłe wystąpienia notepad.exe i ping.exe.
C:\TTD> TTD.exe -out C:\TTD\ -monitor notepad.exe -monitor ping.exe
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.
Successfully uninstalled the Process Launch Monitor driver
Successfully installed the Process Launch Monitor driver
Recording process Notepad.exe(17972) From parent process explorer.exe(8440)
Recording process (PID:17972) on trace file: C:\TTD\Notepad01.run
Tracking process svchost.exe(7824) From parent process services.exe(1292)
Tracking process sppsvc.exe(10376) From parent process services.exe(1292)
Tracking process ClipUp.exe(15108) From parent process svchost.exe(7824)
Tracking process ClipUp.exe(21180) From parent process ClipUp.exe(15108)
Tracking process consent.exe(24280) From parent process svchost.exe(892)
Tracking process ctfmon.exe(24508) From parent process svchost.exe(5064)
Tracking process wt.exe(10768) From parent process explorer.exe(8440)
Tracking process WindowsTerminal.exe(23296) From parent process wt.exe(10768)
Tracking process OpenConsole.exe(6816) From parent process WindowsTerminal.exe(23296)
Tracking process powershell.exe(15956) From parent process WindowsTerminal.exe(23296)
Tracking process git.exe(3656) From parent process powershell.exe(15956)
Tracking process git.exe(1928) From parent process git.exe(3656)
Tracking process git.exe(20312) From parent process powershell.exe(15956)
Tracking process git.exe(5712) From parent process git.exe(20312)
Tracking process csc.exe(16144) From parent process powershell.exe(15956)
Tracking process cvtres.exe(19488) From parent process csc.exe(16144)
Recording process PING.EXE(21468) From parent process powershell.exe(15956)
Recording process (PID:21468) on trace file: C:\TTD\PING01.run
(x64) (PID:21468): Process exited with exit code 1 after 234ms
Full trace dumped to C:\TTD\PING01.run
Tracking process Teams.exe(10060) From parent process Teams.exe(2404)
Tracking process cmd.exe(21796) From parent process powershell.exe(15956)
Recording process PING.EXE(364) From parent process cmd.exe(21796)
Recording process (PID:364) on trace file: C:\TTD\PING02.run
(x64) (PID:364): Process exited with exit code 1 after 234ms
Full trace dumped to C:\TTD\PING02.run
- W tym przykładzie załadujesz notepad.exe, a następnie po uruchomieniu śledzenia załadujesz ping.exe. Podczas przechwytywania interesującego działania użyj CTRL-C w wierszu polecenia, aby zatrzymać nagrywanie.
Porady dotyczące pracy z plikami śledzenia
- W przypadku udostępniania śladów innym osobom udostępnij tylko plik .run. Plik indeksu (.idx) może być tak duży, jak plik .run i jest tworzony automatycznie, gdy WinDbg ładuje plik śladu.
- Podczas współpracy z innymi osobami udostępnij wszelkie odpowiednie pozycje śledzenia dotyczące problemu. Współpracownicy mogą użyć polecenia
!tt x:y, aby przejść do tego dokładnego punktu w czasie podczas wykonywania kodu. Zakresy pozycji czasu można uwzględnić w opisach usterek, aby śledzić, gdzie występuje możliwy problem. - Podczas zgłaszania problemu z funkcją TTD, jeśli podasz plik .run, podaj również plik out. To dodanie umożliwia potwierdzenie, że proces rejestrowania działał prawidłowo.
- Pliki śledzenia (.run) są dobrze kompresowane.
Rozwiązywanie problemów z rejestrowaniem TTD.exe
Mogą wystąpić błędy pliku śledzenia. Aby uzyskać więcej informacji, zobacz Debugowanie podróży w czasie — rozwiązywanie problemów.
Aby rozwiązać problemy, możesz użyć pliku .out. Przykładowy plik pokazuje ślad funkcjonalny kończący się kodem wyjścia zero.
Microsoft (R) TTDRecord 1.01.11
Release: 1.11.47.0
Copyright (C) Microsoft Corporation. All rights reserved.
Initializing Time Travel Debugging for Attach to 9916
Time: 05/08/2023 17:07:15
OS:10.0.25314 EDITION:x64
SessionID: 008F918C-B8A7-4C4E-B91B-34CFC953C501
(TTD::ManageTTDTrace:2725)
Running
(TTD::StartGuestProcess:1512)
Group tracing GUID: B84DF180-DA54-46E5-9019-73690C689979
Running "C:\WINDOWS\SYSTEM32\TTDInject.exe" /duration 1 /InjectMode LoaderForCombinedRecording /ClientParams "37 C:\TTD\Notepad03.run 0 0 0 0 0 0 0 0 c06001 0" /RecordScenario 268435458 /attach 9916 -TraceFileHandle 4f8 -GuestEventHandle 380 -ClientEventHandle 384 -ActiveEventHandle 4f4 -MutexHandle 46c -CommunicationBufferHandle 3c0 -SharedSequenceMutexHandle 3b8 -SharedSequenceBufferHandle 330 /TelemetryFeatureSessionId "008F918C-B8A7-4C4E-B91B-34CFC953C501"
(TTD::StartGuestProcess:1955)
Microsoft (R) TTDInject 1.01.11
Release: 1.11.27.0
Copyright (C) Microsoft Corporation. All rights reserved.
TTDLoader Params:
LauncherDll = TTDLoader
ClientDll = TTDRecordCPU
ClientEntry = InitializeNirvanaClient
ClientParams= 37 C:\TTD\Notepad03.run 0 0 0 0 0 0 0 0 c06001 0
Attach
WaitForMain is off
Allocated processors:55, running threads:2.
Loader TTDLoader.dll injected at 0x00007FFF423B0000 0xc000 -- .reload TTDLoader.dll=0x00007FFF423B0000,0xc000
Injection by thread is complete.
RecordingEngine initialization successful.
RecordVcpu initialization successful.
Loader initialization successful.
Guest Process is x64 binary.
Tracing started at: Tue May 9 00:07:16 2023 (UTC) Mon May 8 17:07:16 2023 (Local)
Guest process exited with exit code 0
Simulation time of '' (x64): 18781ms.
Tracing completed at: Tue May 9 00:07:34 2023 (UTC) Mon May 8 17:07:34 2023 (Local)
Większość zawartości pliku out jest używana wewnętrznie przez zespół debugowania podróży w czasie do rozwiązywania problemów z błędami rejestrowania. Poniższe informacje mogą być przydatne dla innych osób, które pracują z plikiem śledzenia.
- Niektóre komunikaty o błędach są wyświetlane tylko w pliku .out i mogą pomóc w ustaleniu specyfiki błędu.
- Wskazanie czasu na zegarze ściennym w momencie rozpoczęcia i zakończenia nagrania
- Jak długo trwała sesja nagrywania (czas symulacji)
- Czy nagranie jest uruchomieniem (z wierszem polecenia) lub dołączeniem nagrania
- Wersja systemu operacyjnego
Treści powiązane
- Wprowadzenie: Debugowanie podróży w czasie — omówienie — poznaj podstawy TTD.
- Nagrywanie za pomocą WinDbg: Debugowanie z podróżą w czasie — zarejestrowanie śladu — rejestrowanie śladów za pomocą interfejsu użytkownika WinDbg.
- Analizowanie śladów: Debugowanie podróży w czasie — ponowne odtwarzanie śladu — debugowanie zarejestrowanych śladów w usłudze WinDbg.
- Rozwiązywanie problemów: Debugowanie podróży w czasie — rozwiązywanie problemów — rozwiązywanie typowych problemów z rejestrowaniem.