共用方式為


時間移動偵錯 - TTD.exe 命令行公用程式

時間移動偵錯標誌,具有時鐘。

本文說明如何使用 TTD.exe 命令行公用程式來記錄追蹤的時機和方式。

何時使用 TTD.exe 命令行公用程式

時間移動偵錯 (TTD) 可讓您記錄應用程式或進程的程式代碼執行,並將它儲存在追蹤檔案中。 檔案可以在 Windows 調試程式中播放,以找出程式代碼執行的問題。

在許多情況下,使用 TTD 來記錄應用程式或程式最簡單的方式是直接從 WinDbg UI。 如需使用 WinDbg UI 進行時間移動偵錯的資訊,請參閱 時間移動偵錯 - 概觀

您可能有只有 TTD 命令行錄製器需要的情況:在電腦上錄製,而不需要安裝調試程式、進階錄製案例、測試自動化等。在這些案例中,您可以只透過 URL 安裝 TTD 命令行錄製器。

TTD 錄製會影響錄製的程式

TTD 錄製是一項入侵技術。 根據選取的應用程式和錄製選項而定,您會注意到從 5x-20 倍或更慢的速度執行中的應用程式或程式。

建立的追蹤檔案會隨著時間成長,而且可能需要大量的儲存空間。 在最短時間內追蹤工作,擷取感興趣的程式活動,然後儘快關閉追蹤。

一旦 TTD 附加至進程,就無法將其從中移除。 關閉應用程式,或在 TTD 錄製完成後結束程式。 對於系統關鍵進程,這需要重新啟動OS。

TTD 錄製會擷取記憶體內容,而且可能包含個人標識或安全性相關信息,包括但不限於檔案路徑、登錄、記憶體或檔案內容。 確切資訊取決於記錄目標進程活動。

如何下載並安裝 TTD.exe 命令行公用程式 (Preferred 方法)

在這裡下載 TTD 命令列公用程式 - https://aka.ms/ttd/download

選取 [安裝和 TTD 將會下載並安裝]。 TTD 命令會新增至系統路徑,並在安裝完成時於命令提示字元中使用。

如果您遇到安裝困難,請參閱 針對應用程式安裝程式檔案的安裝問題進行疑難解答

在某些電腦上,您可能需要安裝 Windows 10 的 Microsoft 應用程式安裝程式。 它可在 Windows 的 Microsoft Store 應用程式中取得。 從 Windows 10 1809 開始,應用程式安裝程式支援 Windows 封裝管理員。

如何下載並安裝 TTD.exe 命令行公用程式 (離線方法)

雖然慣用的安裝方法是使用應用程式安裝程式,但您也可以下載 TTD 命令行套件,並手動解壓縮檔案。 以下是兩種方式。

從已安裝的 TTD.exe 命令行公用程式擷取檔案

如果您已安裝 TTD 命令行公用程式,您可以從安裝的位置擷取檔案。 在 Powershell 中,您會執行此動作來尋找已安裝的位置:

(Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation

您可以從該處將 * (*.dll*.exe*.sys) 的所有二進位檔複製到新的位置。 以下是在 Powershell 中執行此動作的其中一種方式:

robocopy.exe (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation c:\myttd *.exe *.dll *.sys /E /XD AppxMetadata

以您選擇的目的地取代 「c:\myttd」。。 結果看起來會像 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

請注意,x86 二進位檔位於子目錄中。 如果您不需要記錄 32 位進程,則可以 (刪除此資料夾,而且您可以將 /xd x86 新增至 robocopy 命令,以避免在第一個位置複製該資料夾) 。 ARM64 版本沒有任何子目錄。

只有在您想要使用 UI 來控制錄製時,才需要 TTDRecordUI.dll。 如果您不想要 UI,您可以刪除此檔案。

下載 TTD.exe 命令行公用程式套件,並手動解壓縮檔案

如果您不想安裝 TTD 命令行公用程式,您可以下載套件並手動解壓縮檔案。 下列 Powershell 腳本將會:

  • https://aka.ms/ttd/download取得目前 TTD 版本的 URL。
  • 下載 MSIX 套件組合。
  • 從 MSIX 套件組合擷取要求的架構 MSIX。
  • 從 MSIX 擷取 TTD 二進位檔。
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."
}

假設您已將上述文本儲存為 Get-Ttd.ps1,您可以像這樣執行,將 x64 二進位檔下載到 c:\myttd 目錄:

md c:\myttd
cd c:\myttd
.\Get-Ttd.ps1

或者,您可以指定輸出目錄和架構:

.\Get-Ttd.ps1 -OutDir c:\myttd-arm64 -Arch arm64

以您選擇的目的地取代 「c:\myttd」 或 「c:\myttd-arm64」。。

如何使用 TTD.exe 命令行公用程式來記錄追蹤

有三種方式可以記錄追蹤。

  • 啟動程式
  • 附加至處理序
  • 監視進程

記錄進程之後,您必須觸發您想要偵錯的問題。 您可以開啟有問題的檔案,或按下應用程式中的特定按鈕,以引發感興趣的事件。 當記錄的應用程式自然終止或當機時,將會完成追蹤檔案。

提示

錄製 TTD 追蹤需要系統管理許可權。 這通常是透過從系統管理員命令提示字元執行 ttd.exe 來完成。

如需使用 WinDbg 錄製時間移動追蹤的詳細資訊,請參閱 時間移動偵錯 - 記錄追蹤

啟動程式

-launch <Program> [<arguments>]

啟動和追蹤程式 (預設模式) 。

這是唯一可讓您將自變數傳遞至程式的模式。 程式會以與系統管理員) 相同的許可權啟動 TTD.exe (。 使用 -attach-monitor 來記錄程式及其一般許可權集。

包括 -launch 是選擇性的,但可用於清楚起見。

第一個無法辨識的自變數開頭為 - 或 / 會假設為啟動的可執行路徑,而且任何後續的自變數都會假設為該程式的自變數。

例如,使用 TTD.exe notepad.exe 來啟動和記錄記事本。 當您關閉記事本時,追蹤將會停止。

如需範例使用方式,請參閱 案例使用範例 - 錄製程式

附加至處理序

-attach <PID>

附加至進程識別碼所指定的執行中進程。 使用TaskManager或TaskList公用程式來識別進程號碼。 如需詳細資訊,請參閱 尋找進程標識符

例如,使用 TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run 啟動並記錄標識碼為 21440 的進程,並將追蹤儲存在 MyTraceFile.run 中。

執行 TTD.exe 之前,請確定此範例中 (目錄) C:\traces

如需範例使用方式,請參閱 案例 - 找出並附加至執行中的進程

監視進程

-monitor <Program>

監視選項可讓每次啟動程式時進行監視和追蹤。 若要使用此選項,您必須使用 -out指定輸出位置的完整路徑。

若要停止監視,請按 Ctrl+C。

相較於其他方法,監視的主要優點包括:

  • 您可以以正常方式啟動目標應用程式,不需要找出命令行來啟動它。
  • 目標應用程式會以其一般許可權執行。 如果您直接從 ttd.exe 啟動應用程式將會提升許可權,而且可能會變更程序的行為。
  • 它適用於自動化 (使用腳本來監視程序的啟動,並收集追蹤) 。

您可以指定 -monitor 選項一次以上,以監視多個程式。

如需使用範例,請參閱 案例使用範例 - 監視程式

命令列選項

Syntax

TTD.exe [options] [mode] [program [<arguments>]]

-? | -help

顯示命令行說明。

模式

-launch <Program> [<arguments>]

啟動和追蹤程式 (預設模式) 。

這是唯一可讓您將自變數傳遞至程式的模式。 選項 -launch 必須是命令行中的最後一個 TTD 選項,後面接著要啟動的程式,以及程式需要的任何自變數。 如果未指定任何模式,也會將它視為啟動。 例如 TTD.exe -out C:\traces ping.exe msn.com ,會被視為啟動。

-attach <PID>

附加至進程識別碼所指定的執行中進程。 使用TaskManager或TaskList公用程式來識別進程標識碼。 如需詳細資訊,請參閱 尋找進程標識符

-monitor <Program>

每次啟動程式或服務時都會 (追蹤程式或服務,直到重新啟動) 為止。 若要使用此選項,您必須使用 -out指定輸出位置的完整路徑。

基本命令行選項

-out <path>

指定追蹤檔名或目錄。 如果目錄,目錄必須已經存在。 如果檔名,則檔名不得存在。

-noUI

停用手動控制錄製的UI。

如果未選取此選項,錄製為使用中時會顯示小型UI。 「追蹤關閉」會停止追蹤,應用程式會繼續;「結束應用程式」會關閉也會停止追蹤的應用程式。

小型兩個按鈕 TTD UI 的螢幕快照,其中顯示追蹤狀態和 [結束應用程式] 按鈕。

-accepteula

使用此選項可接受 EULA 使用者許可協定。 在檢閱並接受EULA之後,此選項可用於自動化案例。

TTD 會在第一次執行時顯示EULA。 輸入 Y 或 N 以接受 EULA。 一旦接受,ELA 就不會再於啟動時顯示。 如果 EULA 不接受 TTD 結束,且會顯示 EULA,則下次執行 TTD 時。

追蹤控制件

-stop <process name> | <PID> | all

您可以停止追蹤指定的行程名稱、PID 或 「all」。

-wait <timeout>

等候系統上所有追蹤會話指定的秒數上限。 指定 -1 以無限等候。

-tracingOff

啟動應用程式,並關閉追蹤錄製。 您可以使用 [UI] 複選框,在關閉追蹤後重新開啟。

其他命令行選項

-children

記錄目標以及目標所建立的任何進程。 每個子進程都會記錄到自己的追蹤檔案中。

-cmdLineFilter "<string>"

如果其命令列包含字串,請記錄目標。 此選項僅適用於 -monitor 模式。 當命令行自變數可唯一識別您感興趣的程式時,它很有用。 例如, -monitor notepad.exe -cmdLineFilter "specialfile.txt" 只有在命令行上出現 specialfile.txt 時,才會 notepad.exe 記錄。

-cleanup

卸載行程監視器驅動程式。

追蹤行為設定

-timestampFilename

將時間戳新增至追蹤檔名的最後一個部分。 例如,ping_2023-06-17_103116.run。

例如,若要記錄 ping.exe,並在檔名中包含時間戳,請使用此命令。

ttd.exe  -out c:\traces -timestampFilename ping.exe msn.com

根據預設,會執行循序掃描,以在輸出目錄中尋找未使用的檔案。 如果錄製 ping.exe,錄製器會嘗試 ping01.run、ping02.run 等等。 直到找到未使用的檔名為止。 在大部分情況下,此命名方法就已足夠。 不過,如果您想要多次記錄相同的程式,當有大量的現有檔案時,默認檔案命名演算法可能會變得沒有效率。

-ring

追蹤信號緩衝區。 檔案大小不會成長超過 所 -maxFile指定的限制。 只會儲存符合指定大小之錄製的最後一個部分。

-maxFile <size>

追蹤檔案的大小上限,以 MB 為單位。 在完整追蹤模式中,預設值為1024GB,最小值為1MB。 在通道緩衝區模式中,預設值為 2048MB,最小值為 1MB,最大值為 32768MB。

32 位進程記憶體內部通道的預設值為 256MB。

-maxConcurrentRecordings <count>

在任何一個時間點可以進行的最大錄製數目。 如果未指定,可以同時發生不限數量的錄製。

-numVCpu <number>

指定要在追蹤時保留及使用的虛擬 CPU 數目。 這個值會影響客體進程記憶體上由TTD放置的總記憶體額外負荷。 如果未指定,則每個平台的預設值為:x64/ARM64 為 55,x86 則為 32。

變更此設定, 只有在 記憶體不足時,才會限制記憶體影響。 將 numVCpu 值變更為較低的數位可能會嚴重影響追蹤的效能,而且應該只執行以因應記憶體使用量問題。

如果 TTD.exe 無法錄製,或 .out 檔案表示模擬為 0 秒,則使用 -numVCpu 可能會讓錄製成功。

-replayCpuSupport <support>

指定將用來重新執行追蹤之 CPU 的預期支援。 根據目標程式) 所使用的特定指示,建議使用預設設定來移植計算機之間的追蹤,但其他選項可用來產生小型追蹤檔案和記錄更快速 (。

<support>

Description
Default 默認CPU支援,只需要重新執行CPU中的基本可用支援。
MostConservative 重新執行 CPU 中不需要特殊支援。 適用於將在完全不同的 CPU 架構上重新執行的追蹤,例如 ARM64 CPU 上的 Intel 追蹤。
MostAggressive 假設重新執行 CPU 會與用來記錄的 CPU 相等或更高的功能。
IntelAvxRequired 假設重新執行 CPU 將是 Intel/AMD 64 位 CPU 支援 AVX。
IntelAvx2Required 假設重新執行 CPU 將是支援 AVX2 的 Intel/AMD 64 位 CPU。

減少追蹤的額外負荷

雖然 TTD 對於 (編碼為平均) 少於一個字節/指令的完整指令層級追蹤而言非常有效率,但錄製時仍會有明顯的額外負荷。 新式 CPU 每秒可以執行數十億個指令,甚至讓一個字節/指令成本很高。 在許多情況下,不需要錄製整個程式。

下列選項可用來減少追蹤的額外負荷:

-module <module name>

只記錄指定的模組 (,例如 comdlg32.dll) 和呼叫的程式代碼。 這可以是可執行檔本身或可執行檔所載入的任何 DLL。 您可以多次指定這個選項來記錄多個模組。

使用此選項時,目標進程會以完整速度執行,直到執行指定模組中的程式代碼 () 為止。 TTD 接著會記錄程式,直到執行離開指定的模組 () ,此時錄製會關閉,而目標會回到完整速度。 因為開啟/關閉錄製的成本很高,所以當指定的模組呼叫進程中的其他模組時,TTD 會保持錄製狀態。

-recordmode <Automatic | Manual>

一般來說,只要 TTD 將本身插入目標進程 (「自動」模式,預設) 就會開始錄製。 如果您的程式使用 TTD 的進行中錄製 API 來控制錄製發生的時間,您可以使用「手動」模式以完整速度執行,直到您的程式呼叫 API 開始錄製為止。

使用這些選項可大幅減少記錄額外負荷和追蹤檔案大小。 使用這些選項對記錄的追蹤進行偵錯,與整個進程的追蹤不同。 每當到達追蹤中關閉錄製的位置時,追蹤中的下一個指令就是錄製繼續時所執行的第一個指令。

-passThroughExit

以 TTD.exe 結束值的形式傳遞來賓進程結束值。 此值可透過 %ERRORLEVEL% 變數批處理檔使用。 Powershell 和其他命令行環境也提供取得進程結束值的機制。

-onInitCompleteEvent <eventName>

允許在追蹤初始化完成時發出事件訊號。

案例使用範例 - 錄製程式

案例 - 啟動和記錄 Windows 應用程式

在此案例中,記事本會啟動並建立追蹤。

  1. -launch使用 選項來啟動記事本並加以記錄。
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
  1. 會顯示小型應用程式功能表,其中顯示追蹤已開啟。

TTD UI 的螢幕快照,其中顯示追蹤狀態和 [結束應用程式] 按鈕。

  1. 關閉應用程式時,會產生追蹤檔案。 在此範例中,記事本01.run。

案例 - 使用傳遞的參數啟動和記錄 Windows 應用程式

在此案例中,ping 已啟動,而要 ping 的位址會以參數的形式傳入。

  1. 在此範例中, -launch 選項會省略為預設模式。
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
  1. 關閉應用程式時,會產生追蹤檔案。 在此範例中,ping01.run。

案例 - 找出並附加至執行中的進程

在此案例中,記事本已啟動,其進程標識碼已找到,並藉由附加至執行中的應用程式來建立追蹤

  1. 在此範例記事本中啟動目標應用程式。

  2. 使用 中描述的 TaskList 或其他方法來尋找進程識別碼。 如需詳細資訊,請參閱 尋找進程標識符

C:\TTD> TaskList
...
Notepad.exe                  21440 Console                    1     73,020 K
...
  1. 使用該程序識別碼,請使用 -attach 選項來附加並記錄它。 選擇性地使用 -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

案例 - 錄製父系及其子進程

在此案例中,將會記錄父代及其子進程。 由於某些應用程式可能會使用許多子進程,所以包含子系的系列追蹤檔案可能會變得相當大。

  1. 指定要 -children 記錄之父應用程式的選項和名稱。

這是將 cmd.exe 啟動 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

...

  1. 會建立多個追蹤檔案:一個用於父進程,以及每個子進程的追蹤檔案。 WinDbg 一次只會開啟一個追蹤檔案,因此如果您想要同時偵錯,您必須針對每個追蹤執行個別的 WinDbg 實例。

案例使用範例 - 監視程式

案例 - 監視程序啟動和開始錄製

在此案例中, -monitor 選項可用來記錄所有目前執行中的實例,以及未來 notepad.exe 實例,直到系統重新啟動或 ttd.exe 透過 Ctrl+C 結束為止。 監視 -out 需要選項,而且輸出資料夾必須已經存在。

  1. 監視和追蹤目前的實例,以及任何未來 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

  1. 在此範例中,notepad.exe 的實例在追蹤啟動之後載入。 擷取感興趣的活動之後,會在命令提示字元中使用 CTRL-C 來停止錄製。

案例 - 監視程序啟動的兩個程式

在此案例中, -monitor 選項可用來監視和記錄兩個應用程式。

  1. 監視和追蹤目前,以及任何未來 notepad.exe 和 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
  1. 在此範例中 notepad.exe,然後在追蹤啟動之後載入 ping.exe。 擷取感興趣的活動之後,會在命令提示字元中使用 CTRL-C 來停止錄製。

案例 - 在第二個視窗中停止錄製

在此案例中,已擷取感興趣的活動,而且所有錄製都會使用 -stop all停止。 第二個命令視窗是用來執行 -stop all 選項。

C:\TTD> TTD.exe -stop all
Microsoft (R) TTD 1.01.11
Release: 1.11.121.0
Copyright (C) Microsoft Corporation. All rights reserved.

Full trace written to 'C:\TTD\Notepad01.run'

案例 - 清除監視驅動程式

在此案例中, -cleanup 此選項可用來清除所有錄製完成後的監視器驅動程式。

C:\TTD> TTD.exe -cleanup
The monitor service is not installed
Successfully uninstalled the Process Launch Monitor driver

其他命令行範例

下表醒目提示一些額外的命令行使用範例。 如需說明之選項的其他資訊,請參閱 命令行選項

案例 命令 描述
附加至進程,但尚未開始錄製 Ttd.exe -tracingoff notepad.exe 啟動已關閉錄製的記事本。 錄製可以隨時透過UI啟動。
依命令行篩選 Ttd.exe -cmdlinefilter foo.txt -monitor notepad.exe 記錄 notepad.exe,但只有在啟動命令行時,foo.txt 才會將輸出放在目前的目錄中。
環形錄製 Ttd.exe -ring -attach 1234 將 PID 1234 記錄到追蹤檔案上限為 2GB,並將輸出放在目前目錄中。 追蹤檔案中的較舊內容會視需要覆寫,使檔案維持在大小上限之下。

使用 -maxfile 來變更大小上限。
限制追蹤檔案大小 Ttd.exe -maxfile 4096 notepad.exe 記錄 notepad.exe 直到追蹤檔案達到 4GB 為止,將輸出放在目前的目錄中。
限制同時發生的錄製次數 Ttd.exe -maxconcurrentrecordings 1 -out c:\my\dir -monitor notepad.exe 錄製會耗用大量CPU,在某些情況下。
減少目標進程中的記憶體使用量 Ttd.exe -numvcpu 8 -monitor w3wp.exe 某些進程,例如 w3wp.exe,在可以使用的記憶體數量上設定少量配額。 如果 ttd.exe 無法開始錄製,請使用 -numvcpu 來減少虛擬 CPU TTD 配置的數目。 只有在 ttd.exe 無法透過其他方式記錄時,才嘗試此選項。
選擇追蹤可移植性和錄製速度/追蹤檔案大小 Ttd.exe -replaycpusupport mostaggressive notepad.exe 根據預設,TTD 會產生可移植到各種硬體的追蹤檔案。 選擇 [mostaggressive] 會告訴 TTD 記錄追蹤,這隻能播放與記錄追蹤的電腦相同的 CPU。 在某些情況下,這可以大幅改善錄製速度和追蹤檔案大小。

自動化命令行範例

下表醒目提示一些額外的命令行使用範例,這些範例對於自動使用 TTD.exe 公用程式很有用。

案例 命令 描述
停用UI Ttd.exe -noui -accepteula notepad.exe 記錄 notepad.exe,將輸出放入目前的目錄中,而不顯示UI。
等候錄製器以程式設計方式啟動 Ttd.exe -accepteula -oninitcompleteevent ttd_notepad notepad.exe 建立名為 事件 『ttd_notepad』 的 Win32,並啟動 notepad.exe。 TTD 會在初始化錄製時發出「ttd_notepad」訊號。 自動化可以等候事件,再繼續進行其想要記錄的行為。
保留目標的結束代碼 Ttd.exe -accepteula -passthroughexit ping.exe msn.com 記錄 ping.exe,將輸出放在目前目錄中。 Ttd.exe 的結束代碼會與 ping.exe 的結束代碼相同。
等候錄製結束 Ttd.exe -accepteula -wait 30 錄製停止之後,最多等候 30 秒,TTD 才能完成將追蹤檔案寫入磁碟。 使用 -wait -1 無限期等候。

所有這些範例都會使用 -accepteula 選項,以確保EULA確認對話框不會封鎖自動化。

使用產生的追蹤檔案

如需使用追蹤的相關信息,以及如何重新執行時間移動追蹤,以及往後巡覽,請參閱 時間移動偵錯 - 重新執行追蹤

使用追蹤檔案的秘訣

  • 與其他人共用追蹤時,您只需要共用 .run 檔案。 索引檔案 (.idx) 的大小可以和 .run 檔案一樣大,而且會在 WinDbg 載入追蹤檔案時自動建立。
  • 與其他人共同作業時,請傳遞與手邊問題相關的任何相關追蹤位置。 共同作業者可以使用 !tt x:y 命令,在程式代碼執行時移至該確切的時間點。 時間位置範圍可以包含在錯誤描述中,以追蹤可能發生問題的位置。
  • 回報 TTD 的問題時,如果您提供 .run 檔案,也請提供 .out 檔案。 這可確認錄製程式正常運作。
  • 追蹤檔案 (.run) 壓縮。

疑難解答 TTD.exe

在某些情況下,可能會發生追蹤檔案錯誤。 如需詳細資訊,請參閱 時間移動偵錯 - 疑難解答

.out 檔案可用於疑難解答。 範例輸出檔案會顯示功能追蹤,結尾為零的結束代碼。

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)

大部分的 .out 檔案內容都是在內部由時間移動偵錯小組用來針對記錄錯誤進行疑難解答。 下列資訊對使用追蹤檔案的其他人很有説明。

  • 某些錯誤訊息只會顯示在 .out 檔案中,而且可用來判斷失敗的詳細數據。
  • 記錄啟動/停止的時鐘時間指示
  • 錄製會話持續多久 (模擬時間)
  • 錄製是否為啟動 (命令行) 或附加錄製
  • 操作系統版本

另請參閱

時間移動偵錯 - 概觀

時間移動偵錯 - 記錄追蹤

時間移動偵錯 - 重新執行追蹤