共用方式為


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

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

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

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

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

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

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

TTD 錄製會影響錄製的程式

TTD 錄音是一種侵入性技術。 視應用程式及選取的錄製選項而定,您會注意到執行中應用程式或進程的 5x-20 倍或變慢。

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

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

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

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

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

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

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

在某些電腦上,您可能需要安裝適用於 Windows 10 的 Microsoft 應用程式安裝程式。 其可在 Windows 的 Microsoft 市集應用程式中取得。 從 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 選項來監視多個程式。

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

命令列選項

語法

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 或「全部」。

-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 將是 Intel/AMD 64 位 CPU,支援 AVX2。

減少追蹤的額外負荷

雖然 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

其他命令行範例

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

案例 Command 描述
附加至進程,但尚未開始錄製 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 會產生可移植到各種硬體的追蹤檔案。 選擇 [大部分輸入] 會告訴TTD記錄追蹤,其只能播放與記錄追蹤的電腦相同的CPU。 在某些情況下,這可以大幅改善錄製速度和追蹤檔案大小。

自動化命令行範例

下表強調一些額外的命令行使用範例,可用於自動使用 TTD.exe 公用程式。

案例 Command 描述
停用UI Ttd.exe -noui -accepteula notepad.exe 記錄notepad.exe,將輸出放入當前目錄,而不顯示 UI。
等候錄製器以程式設計方式啟動 Ttd.exe -accepteula -oninitcompleteevent ttd_notepad notepad.exe 建立名為 event '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 檔案可用於疑難解答。 範例 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 檔案中,而且可用來判斷失敗的詳細數據。
  • 錄製開始/停止的時鐘時間指示
  • 錄製工作階段持續多久(模擬時間)
  • 錄製是啟動或附加錄製
  • OS 版本

另請參閱

時間移動偵錯 - 概觀

時間移動偵錯 - 記錄追蹤

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