Penelusuran Kesalahan Perjalanan Waktu - utilitas baris perintah TTD.exe

Logo penelusuran kesalahan perjalanan waktu yang menampilkan jam.

Artikel ini menjelaskan kapan dan bagaimana menggunakan utilitas baris perintah TTD.exe untuk merekam jejak.

Kapan menggunakan utilitas baris perintah TTD.exe

Time Travel Debugging (TTD) memungkinkan Anda merekam eksekusi kode aplikasi atau proses dan menyimpannya dalam file pelacakan. File dapat diputar kembali di debugger Windows untuk menemukan masalah dengan eksekusi kode.

Untuk banyak skenario, cara termampu untuk menggunakan TTD untuk merekam aplikasi atau proses langsung dari UI WinDbg. Untuk informasi tentang penelusuran kesalahan perjalanan waktu menggunakan UI WinDbg, lihat Penelusuran Kesalahan Perjalanan Waktu - Gambaran Umum.

Anda mungkin memiliki skenario di mana hanya perekam baris perintah TTD yang diperlukan: merekam pada PC tanpa menginstal debugger, skenario perekaman tingkat lanjut, otomatisasi pengujian, dll. Dalam skenario ini Anda hanya dapat menginstal perekam baris perintah TTD melalui URL.

Perekaman TTD berdampak pada proses yang direkam

Perekaman TTD adalah teknologi invasif. Anda akan melihat di mana saja dari 5x-20x atau lebih perlambatan aplikasi atau proses yang sedang berjalan saat merekam, tergantung pada aplikasi dan opsi perekaman yang dipilih.

File pelacakan yang dibuat tumbuh dari waktu ke waktu dan dapat memakan ruang penyimpanan yang signifikan. Bekerja untuk melacak untuk jangka waktu terpendek, menangkap aktivitas program yang menarik dan kemudian menutup jejak sesegera mungkin.

Setelah TTD dilampirkan ke proses, TTD tidak dapat dihapus darinya. Tutup aplikasi atau akhiri proses setelah perekaman TTD selesai. Untuk proses yang penting bagi sistem, ini akan memerlukan boot ulang OS.

Rekaman TTD menangkap konten memori dan mungkin berisi informasi terkait identitas pribadi atau keamanan, termasuk tetapi tidak selalu terbatas pada jalur file, registri, memori, atau konten file. Informasi yang tepat tergantung pada aktivitas proses target saat direkam.

Cara mengunduh dan menginstal utilitas baris perintah TTD.exe (Metode pilihan)

Unduh utilitas baris perintah TTD di sini - https://aka.ms/ttd/download

Pilih Instal dan TTD akan mengunduh dan menginstal. Perintah TTD ditambahkan ke jalur sistem dan tersedia untuk digunakan pada prompt perintah, ketika penginstalan selesai.

Jika Anda mengalami kesulitan saat menginstal, lihat Memecahkan masalah penginstalan dengan file Penginstal Aplikasi.

Pada beberapa PC, Anda mungkin perlu menginstal Penginstal Aplikasi Microsoft untuk Windows 10. Ini tersedia di aplikasi Microsoft Store di Windows. Pengelola Paket Windows didukung melalui Penginstal Aplikasi mulai Windows 10 1809.

Cara mengunduh dan menginstal utilitas baris perintah TTD.exe (Metode offline)

Meskipun metode penginstalan yang disukai adalah menggunakan Penginstal Aplikasi, Anda juga dapat mengunduh paket baris perintah TTD dan mengekstrak file secara manual. Berikut adalah dua cara untuk melakukannya.

Mengekstrak file dari utilitas baris perintah TTD.exe yang sudah diinstal

Jika Anda telah menginstal utilitas baris perintah TTD, Anda dapat mengekstrak file dari lokasi yang diinstal. Di Powershell, Anda akan melakukan ini untuk menemukan lokasi yang diinstal:

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

Dari sana Anda dapat menyalin semua biner (*.dll, *.exe, *.sys) ke lokasi baru. Berikut adalah salah satu cara untuk melakukan ini di Powershell:

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

Ganti "c:\myttd" dengan tujuan pilihan Anda. Hasilnya akan terlihat seperti ini (pada mesin 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

Perhatikan bahwa biner x86 berada dalam subdirektori. Jika Anda tidak perlu merekam proses 32-bit folder ini dapat dihapus (dan Anda dapat menambahkan /xd x86 ke perintah robocopy untuk menghindari menyalinnya di tempat pertama). Versi ARM64 tidak memiliki subdirektori apa pun.

TTDRecordUI.dll hanya diperlukan jika Anda ingin menggunakan UI untuk mengontrol perekaman. Jika Anda tidak menginginkan UI, Anda dapat menghapus file ini.

Unduh paket utilitas baris perintah TTD.exe dan ekstrak file secara manual

Jika Anda tidak ingin menginstal utilitas baris perintah TTD, Anda dapat mengunduh paket dan mengekstrak file secara manual. Skrip Powershell berikut ini akan:

  • Dapatkan URL untuk versi TTD saat ini dari https://aka.ms/ttd/download.
  • Unduh bundel MSIX.
  • Ekstrak MSIX arsitektur yang diminta dari bundel MSIX.
  • Ekstrak biner TTD dari 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."
}

Dengan asumsi Anda menyimpan skrip di atas sebagai Get-Ttd.ps1, Anda dapat menjalankannya seperti ini untuk mengunduh biner x64 ke direktori c:\myttd:

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

Atau Anda dapat menentukan direktori output dan arsitektur:

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

Ganti "c:\myttd" atau "c:\myttd-arm64" dengan tujuan pilihan Anda.

Cara merekam jejak menggunakan utilitas baris perintah TTD.exe

Ada tiga cara untuk merekam jejak.

  • Meluncurkan proses
  • Melampirkan ke proses
  • Memantau proses

Setelah proses direkam, Anda perlu memicu masalah yang ingin Anda debug. Anda mungkin membuka file yang bermasalah atau mengklik tombol tertentu di aplikasi untuk menyebabkan peristiwa yang menarik terjadi. Ketika aplikasi yang direkam berakhir, secara alami atau dengan crash, file jejak akan diselesaikan.

Tip

Merekam jejak TTD memerlukan hak administratif. Biasanya ini dilakukan dengan menjalankan ttd.exe dari prompt perintah administrator.

Untuk informasi selengkapnya tentang merekam jejak perjalanan waktu menggunakan WinDbg, lihat Penelusuran Kesalahan Perjalanan Waktu - Merekam jejak.

Meluncurkan proses

-launch <Program> [<arguments>]

Luncurkan dan lacak program (mode default).

Ini adalah satu-satunya mode yang memungkinkan Anda meneruskan argumen ke program. Program ini akan diluncurkan dengan hak istimewa yang sama dengan TTD.exe (sebagai admin). Gunakan -attach atau -monitor untuk merekam program dengan serangkaian hak istimewa normalnya.

Termasuk -launch bersifat opsional, tetapi dapat digunakan untuk kejelasan.

Argumen pertama yang tidak dikenali yang tidak dimulai dengan - atau / akan diasumsikan sebagai jalur yang dapat dieksekusi untuk diluncurkan, dan argumen berikutnya akan diasumsikan sebagai argumen untuk program tersebut.

Misalnya, gunakan TTD.exe notepad.exe untuk meluncurkan dan merekam notepad. Jejak akan berhenti saat Anda menutup notepad.

Misalnya penggunaan, lihat Contoh penggunaan skenario - merekam proses.

Melampirkan ke proses

-attach <PID>

Lampirkan ke proses yang sedang berjalan yang ditentukan oleh ID proses. Gunakan TaskManager atau utilitas TaskList untuk mengidentifikasi nomor proses. Untuk informasi selengkapnya, lihat Menemukan ID proses.

Misalnya, gunakan TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run untuk meluncurkan dan merekam proses dengan DAN ID 21440 dan simpan jejak di MyTraceFile.run.

Pastikan direktori ada (C:\traces dalam contoh ini) sebelum menjalankan TTD.exe.

Misalnya penggunaan, lihat Skenario - Temukan dan lampirkan ke proses yang sedang berjalan.

Memantau proses

-monitor <Program>

Opsi monitor memungkinkan program dipantau dan dilacak setiap kali dimulai. Untuk menggunakan opsi ini, Anda harus menentukan jalur lengkap ke lokasi output dengan -out.

Untuk berhenti memantau tekan Ctrl+C.

Manfaat utama pemantauan dibandingkan dengan metode lain adalah:

  • Anda dapat meluncurkan aplikasi target dengan cara normal, tidak perlu mencari tahu baris perintah untuk memulainya.
  • Aplikasi target akan berjalan dengan hak istimewa normalnya. Jika Anda meluncurkan aplikasi langsung dari ttd.exe aplikasi akan ditingkatkan dan itu dapat mengubah perilaku program.
  • Ini berguna untuk otomatisasi (gunakan skrip yang memantau peluncuran program dan mengumpulkan jejak).

Opsi -monitor dapat ditentukan lebih dari sekali untuk memantau beberapa program.

Misalnya penggunaan, lihat Contoh penggunaan skenario - proses pemantauan.

Opsi baris Perintah

Sintaks

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

-? | -help

Tampilkan bantuan baris perintah.

Mode

-launch <Program> [<arguments>]

Luncurkan dan lacak program (mode default).

Ini adalah satu-satunya mode yang memungkinkan Anda meneruskan argumen ke program. Opsi -launch harus menjadi opsi TTD terakhir di baris perintah, diikuti oleh program untuk diluncurkan, dan argumen apa pun yang diperlukan program. Jika tidak ada mode yang ditentukan, mode juga akan diperlakukan sebagai peluncuran. Misalnya TTD.exe -out C:\traces ping.exe msn.com diperlakukan sebagai peluncuran.

-attach <PID>

Lampirkan ke proses yang sedang berjalan yang ditentukan oleh ID proses. Gunakan utilitas TaskManager atau TaskList untuk mengidentifikasi ID proses. Untuk informasi selengkapnya, lihat Menemukan ID proses.

-monitor <Program>

Lacak program atau layanan setiap kali dimulai (hingga reboot). Untuk menggunakan opsi ini, Anda harus menentukan jalur lengkap ke lokasi output dengan -out.

Opsi baris perintah dasar

-out <path>

Tentukan nama file pelacakan atau direktori. Jika direktori, direktori harus sudah ada. Jika nama file, nama file tidak boleh ada.

-noUI

Menonaktifkan UI untuk kontrol manual perekaman.

Jika opsi ini tidak dipilih, UI kecil ditampilkan saat perekaman aktif. "Pelacakan Mati" menghentikan pelacakan dan aplikasi berlanjut; "Exit App" menutup aplikasi yang juga menghentikan pelacakan.

Cuplikan layar antarmuka pengguna TTD tombol dua kecil yang menampilkan status pelacakan dan tombol Keluar dari Aplikasi.

-accepteula

Gunakan opsi ini untuk menerima perjanjian lisensi pengguna EULA. Opsi ini dapat digunakan dalam skenario otomatisasi, setelah EULA ditinjau dan diterima.

TTD menampilkan EULA saat pertama kali dijalankan. Ketik Y atau N untuk menerima EULA. Setelah diterima, ELA tidak akan lagi ditampilkan saat startup. Jika EULA tidak diterima TTD keluar, dan EULA akan ditampilkan, lain kali TTD dijalankan.

Kontrol pelacakan

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

Berhenti melacak nama proses yang ditentukan, PID atau "semua" dapat ditentukan.

-wait <timeout>

Tunggu hingga jumlah detik yang ditentukan untuk semua sesi pelacakan pada sistem berakhir. Tentukan -1 untuk menunggu tanpa batas.

-tracingOff

Memulai aplikasi dengan pelacakan perekaman nonaktif. Anda dapat menggunakan kotak centang UI untuk mengaktifkan pelacakan kembali setelah dimatikan.

Opsi baris perintah tambahan

-children

Catat target serta proses apa pun yang dibuat oleh target. Setiap proses anak akan direkam ke dalam file pelacakannya sendiri.

-cmdLineFilter "<string>"

Rekam target jika baris perintahnya berisi string. Opsi ini hanya berfungsi dengan -monitor mode. Ini berguna untuk situasi ketika argumen baris perintah secara unik mengidentifikasi proses yang Anda minati. Misalnya, -monitor notepad.exe -cmdLineFilter "specialfile.txt" rekaman notepad.exe hanya jika specialfile.txt muncul di baris perintah.

-cleanup

Hapus pengandar monitor proses.

Melacak pengaturan perilaku

-timestampFilename

Menambahkan tanda waktu ke bagian terakhir dari nama file jejak. Misalnya, ping_2023-06-17_103116.run.

Misalnya untuk merekam ping.exe, dengan tanda waktu yang disertakan dalam nama file, gunakan perintah ini.

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

Secara default, pemindaian berurutan dilakukan untuk menemukan file yang tidak digunakan di direktori output. Jika ping.exe dicatat, perekam akan mencoba ping01.run, ping02.run, dll. hingga nama file yang tidak digunakan ditemukan. Untuk sebagian besar skenario metode penamaan ini sudah cukup. Namun, jika Anda ingin merekam program yang sama berkali-kali, algoritma penamaan file default dapat menjadi tidak efisien, ketika ada sejumlah besar file yang ada.

-ring

Lacak ke buffer cincin. Ukuran file tidak akan tumbuh melebihi batas yang ditentukan oleh -maxFile. Hanya bagian terakhir dari rekaman yang pas dalam ukuran tertentu, yang akan disimpan.

-maxFile <size>

Ukuran maksimum file pelacakan dalam MB. Ketika dalam mode pelacakan penuh, defaultnya adalah 1024GB dan nilai minimumnya adalah 1MB. Ketika dalam mode buffer cincin, defaultnya adalah 2048MB, nilai minimumnya adalah 1MB, dan nilai maksimumnya adalah 32768MB.

Default untuk cincin dalam memori pada proses 32-bit adalah 256MB.

-maxConcurrentRecordings <count>

Jumlah maksimum rekaman yang dapat berlangsung pada satu titik waktu. Jika tidak ditentukan, jumlah rekaman yang tidak terbatas dapat terjadi secara bersamaan.

-numVCpu <number>

Menentukan sejumlah CPU Virtual yang akan dicadangkan dan digunakan saat melacak. Nilai ini memengaruhi total overhead memori yang ditempatkan pada memori proses tamu oleh TTD. Jika tidak ditentukan, default per platform adalah: 55 untuk x64/ARM64 dan 32 untuk x86.

Ubah pengaturan ini untuk membatasi dampak memori hanya jika Anda kehabisan memori. Mengubah nilai numVCpu menjadi angka yang lebih rendah dapat sangat berdampak pada performa pelacakan dan hanya boleh dilakukan untuk mengatasi masalah penggunaan memori.

Jika TTD.exe gagal merekam, atau file .out menunjukkan simulasi 0 detik, menggunakan -numVCpu dapat memungkinkan perekaman berhasil.

-replayCpuSupport <support>

Menentukan dukungan apa yang diharapkan dari CPU yang akan digunakan untuk memutar ulang jejak. Pengaturan default direkomendasikan untuk portabilitas jejak antar mesin tetapi opsi lain dapat digunakan untuk menghasilkan file jejak kecil dan merekam lebih cepat (tergantung pada instruksi spesifik yang digunakan oleh program target).

<support> Nilai

Nilai Deskripsi
Default Dukungan CPU default, hanya memerlukan dukungan dasar yang umum tersedia di CPU pemutaran ulang.
MostConservative Tidak memerlukan dukungan khusus dalam CPU pemutaran ulang. Memadai untuk jejak yang akan diputar ulang pada arsitektur CPU yang sama sekali berbeda, seperti jejak Intel pada CPU ARM64.
MostAggressive Mengasumsikan bahwa CPU pemutaran ulang akan serupa dan memiliki kemampuan yang sama atau lebih besar daripada CPU yang digunakan untuk merekam.
IntelAvxRequired Mengasumsikan bahwa CPU pemutaran ulang akan menjadi CPU Intel/AMD 64-bit yang mendukung AVX.
IntelAvx2Required Mengasumsikan bahwa CPU pemutaran ulang akan menjadi CPU Intel/AMD 64-bit yang mendukung AVX2.

Mengurangi overhead pelacakan

Meskipun TTD sangat efisien untuk apa yang dilakukannya (pelacakan tingkat instruksi penuh yang dikodekan menjadi kurang dari satu byte/instruksi rata-rata), TTD masih memiliki overhead yang nyata saat merekam. CPU modern dapat menjalankan miliaran instruksi per detik, membuat bahkan satu byte/instruksi mahal. Dalam banyak kasus, merekam seluruh proses tidak diperlukan.

Opsi berikut dapat digunakan untuk mengurangi overhead pelacakan:

-module <module name>

Rekam hanya modul yang ditentukan (misalnya comdlg32.dll) dan kode yang dipanggilnya. Ini bisa menjadi executable itu sendiri atau DLL apa pun yang dimuat oleh executable. Opsi ini dapat ditentukan lebih dari sekali untuk merekam beberapa modul.

Ketika opsi ini digunakan, proses target berjalan dengan kecepatan penuh hingga kode dalam modul yang ditentukan dijalankan. TTD kemudian akan merekam proses hingga eksekusi meninggalkan modul yang ditentukan, di mana perekaman titik dimatikan dan target kembali ke kecepatan penuh. Karena mengaktifkan/menonaktifkan perekaman mahal, TTD akan membiarkan perekaman aktif saat modul tertentu memanggil modul lain dalam prosesnya.

-recordmode <Automatic | Manual>

Biasanya perekaman dimulai segera setelah TTD menyuntikkan dirinya dalam proses target (mode "Otomatis", defaultnya). Jika program Anda menggunakan API perekaman dalam proses TTD untuk mengontrol kapan perekaman terjadi, Anda dapat menggunakan mode "Manual" untuk berjalan dengan kecepatan penuh sampai program Anda memanggil API untuk mulai merekam.

Menggunakan opsi ini dapat mengakibatkan pengurangan yang signifikan dalam merekam overhead dan melacak ukuran file. Penelusuran kesalahan jejak yang direkam dengan opsi ini tidak berbeda dari jejak seluruh proses. Setiap kali Anda mencapai lokasi di jejak di mana rekaman dinonaktifkan, instruksi berikutnya dalam pelacakan adalah instruksi pertama yang dijalankan saat perekaman dilanjutkan.

-passThroughExit

Teruskan nilai keluar proses tamu sebagai nilai keluar TTD.exe. Nilai ini tersedia untuk file batch melalui %ERRORLEVEL% variabel . Powershell dan lingkungan baris perintah lainnya menawarkan mekanisme untuk mendapatkan nilai keluar proses juga.

-onInitCompleteEvent <eventName>

Memungkinkan peristiwa disinyalkan saat pelacakan inisialisasi selesai.

Contoh penggunaan skenario - merekam proses

Skenario - Meluncurkan dan merekam aplikasi Windows

Dalam skenario ini notepad diluncurkan dan jejak dibuat.

  1. -launch Gunakan opsi untuk memulai notepad dan merekamnya.
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. Menu aplikasi kecil ditampilkan yang menunjukkan bahwa pelacakan aktif.

Cuplikan layar antarmuka pengguna TTD yang menampilkan status pelacakan dan tombol Keluar Dari Aplikasi.

  1. Ketika aplikasi ditutup, file pelacakan dihasilkan. Dalam contoh ini notepad01.run.

Skenario - Meluncurkan dan merekam aplikasi Windows dengan parameter yang diteruskan

Dalam skenario ini ping dimulai, dan alamat ke ping diteruskan sebagai parameter.

  1. Dalam contoh -launch ini, opsi dihilangkan karena itu adalah mode default.
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. Ketika aplikasi ditutup, file pelacakan dihasilkan. Dalam contoh ini ping01.run.

Skenario - Menemukan dan melampirkan ke proses yang sedang berjalan

Dalam skenario ini notepad dimulai, ID prosesnya terletak dan jejak dibuat dengan melampirkan ke aplikasi yang sedang berjalan

  1. Mulai aplikasi target, dalam contoh notepad ini.

  2. Gunakan TaskList atau metode lain yang dijelaskan untuk menemukan ID proses. Untuk informasi selengkapnya, lihat Menemukan ID proses.

C:\TTD> TaskList
...
Notepad.exe                  21440 Console                    1     73,020 K
...
  1. Dengan menggunakan ID proses tersebut, gunakan opsi untuk melampirkan -attach dan merekamnya. Secara opsional tentukan nama file untuk file pelacakan menggunakan -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

Skenario - Merekam proses induk dan turunannya

Dalam skenario ini, proses induk dan turunannya akan direkam. Karena beberapa aplikasi mungkin menggunakan banyak proses anak, file pelacakan keluarga yang berisi anak-anak, mungkin menjadi cukup besar.

  1. Tentukan -children opsi dan nama aplikasi induk yang akan direkam.

Ini adalah contoh perekaman cmd.exe meluncurkan ping.exe sebagai proses anak.

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. Beberapa file pelacakan dibuat: satu untuk proses induk dan file pelacakan untuk setiap proses anak. WinDbg hanya membuka satu file pelacakan pada satu waktu sehingga Anda harus menjalankan instans WinDbg terpisah untuk setiap jejak, jika Anda ingin men-debugnya pada saat yang sama.

Contoh penggunaan skenario - proses pemantauan

Skenario - pemantauan untuk peluncuran program dan memulai perekaman

Dalam skenario -monitor ini, opsi digunakan untuk merekam semua instans yang sedang berjalan serta instans notepad.exe di masa mendatang, hingga sistem di-boot ulang atau ttd.exe keluar melalui Ctrl+C. Opsi -out diperlukan untuk monitor, dan folder output harus sudah ada.

  1. Pantau dan lacak saat ini, serta instans notepad.exe di masa mendatang.
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. Dalam contoh ini dua instans notepad.exe dimuat setelah pelacakan dimulai. Setelah aktivitas minat ditangkap, CTRL-C, digunakan pada prompt perintah untuk menghentikan rekaman.

Skenario - memantau dua program untuk peluncuran program

Dalam skenario -monitor ini, opsi digunakan untuk memantau dan merekam dua aplikasi.

  1. Pantau dan lacak saat ini, serta instans notepad.exe dan ping.exe di masa mendatang.
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. Dalam contoh ini notepad.exe lalu ping.exe dimuat setelah pelacakan dimulai. Setelah aktivitas minat ditangkap, CTRL-C, digunakan pada prompt perintah untuk menghentikan rekaman.

Skenario - Menghentikan perekaman di jendela kedua

Dalam skenario ini aktivitas yang menarik ditangkap, dan semua rekaman dihentikan menggunakan -stop all. Jendela perintah kedua digunakan untuk menjalankan -stop all opsi .

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'

Skenario - Membersihkan driver monitor

Dalam skenario -cleanup ini, opsi digunakan untuk membersihkan driver monitor setelah semua perekaman selesai.

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

Contoh baris perintah tambahan

Tabel ini menyoroti beberapa contoh penggunaan baris perintah tambahan. Lihat opsi Baris perintah untuk informasi tambahan tentang opsi yang diilustrasikan.

Skenario Perintah Deskripsi
Lampirkan ke proses tetapi belum mulai merekam Ttd.exe -tracingoff notepad.exe Meluncurkan notepad dengan perekaman dimatikan. Rekaman dapat dimulai kapan saja melalui UI.
Filter menurut baris perintah Ttd.exe -cmdlinefilter foo.txt -monitor notepad.exe Rekam notepad.exe tetapi hanya jika foo.txt berada di baris perintah saat diluncurkan, menempatkan output di direktori saat ini.
Perekaman dering Ttd.exe -ring -attach 1234 Merekam PID 1234 ke dalam file pelacakan yang dibatasi hingga 2GB, menempatkan output di direktori saat ini. Konten lama dalam file pelacakan ditimpa sesuai kebutuhan untuk menyimpan file di bawah ukuran maksimum.

Gunakan -maxfile untuk mengubah ukuran maksimum.
Batasi ukuran file pelacakan Ttd.exe -maxfile 4096 notepad.exe Rekam notepad.exe hingga file pelacakan mencapai 4GB, menempatkan output di direktori saat ini.
Batasi jumlah rekaman yang terjadi pada saat yang sama Ttd.exe -maxconcurrentrecordings 1 -out c:\my\dir -monitor notepad.exe Perekaman intensif CPU dan dalam beberapa kasus.
Mengurangi penggunaan memori dalam proses target Ttd.exe -numvcpu 8 -monitor w3wp.exe Beberapa proses, seperti w3wp.exe, menetapkan kuota kecil pada jumlah memori yang dapat digunakannya. Jika ttd.exe gagal memulai perekaman, gunakan -numvcpu untuk mengurangi jumlah Alokasi TTD CPU virtual. Hanya coba opsi ini jika ttd.exe tidak dapat merekam melalui cara lain.
Pilih antara portabilitas jejak dan kecepatan perekaman / ukuran file pelacakan Ttd.exe -replaycpusupport mostaggressive notepad.exe Secara default TTD menghasilkan file pelacakan yang portabel di berbagai perangkat keras. Memilih 'mostaggressive' memberi tahu TTD tidak apa-apa untuk merekam jejak yang hanya dapat diputar kembali pada CPU dengan kemampuan yang sama dengan mesin yang merekam jejak. Dalam beberapa kasus, ini dapat secara substansial meningkatkan kecepatan perekaman dan melacak ukuran file.

Contoh baris perintah Automation

Tabel ini menyoroti beberapa contoh penggunaan baris perintah tambahan yang dapat berguna untuk penggunaan utilitas TTD.exe otomatis.

Skenario Perintah Deskripsi
Nonaktifkan UI Ttd.exe -noui -accepteula notepad.exe Rekam notepad.exe, menempatkan output ke direktori saat ini, tanpa menampilkan UI.
Tunggu perekam dimulai secara terprogram Ttd.exe -accepteula -oninitcompleteevent ttd_notepad notepad.exe Buat acara bernama Win32 'ttd_notepad' dan luncurkan notepad.exe. TTD akan memberi sinyal 'ttd_notepad' saat perekaman diinisialisasi. Automation dapat menunggu peristiwa sebelum melanjutkan perilaku yang ingin merekam.
Mempertahankan kode keluar target Ttd.exe -accepteula -passthroughexit ping.exe msn.com Merekam ping.exe, menempatkan output di direktori saat ini. kode keluar Ttd.exe akan sama dengan kode keluar ping.exe.
Tunggu hingga perekaman berakhir Ttd.exe -accepteula -wait 30 Setelah perekaman dihentikan, tunggu hingga 30 detik agar TTD selesai menulis file jejak ke disk. Gunakan -wait -1 untuk menunggu tanpa batas waktu.

Semua contoh ini menggunakan -accepteula opsi untuk memastikan bahwa otomatisasi tidak diblokir oleh dialog konfirmasi EULA.

Bekerja dengan file pelacakan yang dihasilkan

Untuk informasi tentang bekerja dengan jejak dan instruksi tentang cara memutar ulang jejak perjalanan waktu, dan menavigasi maju dan mundur tepat waktu, lihat Penelusuran Kesalahan Perjalanan Waktu - Memutar ulang jejak.

Tips bekerja dengan file pelacakan

  • Saat berbagi jejak dengan orang lain, Anda hanya perlu berbagi file .run. File indeks (.idx) bisa sebesar file .run dan secara otomatis dibuat ketika file pelacakan dimuat oleh WinDbg.
  • Saat berkolaborasi dengan orang lain, teruskan posisi pelacakan yang relevan yang terkait dengan masalah yang ada. Kolaborator dapat menggunakan !tt x:y perintah untuk berpindah ke titik waktu yang tepat dalam eksekusi kode. Rentang posisi waktu dapat disertakan dalam deskripsi bug untuk melacak di mana kemungkinan masalah mungkin terjadi.
  • Saat melaporkan masalah dengan TTD, jika Anda menyediakan file .run, berikan file .out juga. Hal ini memungkinkan konfirmasi bahwa proses perekaman bekerja dengan baik.
  • Lacak file (.run) kompres dengan baik.

TTD.exe pemecahan masalah

Ada beberapa kasus di mana kesalahan file pelacakan dapat terjadi. Untuk informasi selengkapnya, lihat Penelusuran Kesalahan Perjalanan Waktu - Pemecahan Masalah.

File .out dapat digunakan untuk pemecahan masalah. Contoh file keluar menunjukkan pelacakan fungsi, diakhiling dengan kode keluar nol.

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)

Sebagian besar konten file .out digunakan secara internal oleh tim penelusuran kesalahan perjalanan waktu untuk memecahkan masalah kesalahan perekaman. Informasi berikut ini dapat membantu orang lain yang bekerja dengan file pelacakan.

  • Beberapa pesan kesalahan hanya ditampilkan dalam file .out dan dapat digunakan untuk menentukan spesifik kegagalan.
  • Indikasi waktu jam dinding rekaman dimulai / dihentikan
  • Berapa lama sesi perekaman berlangsung (waktu simulasi)
  • Apakah rekaman adalah peluncuran (dengan baris perintah) atau melampirkan rekaman
  • Versi OS

Lihat juga

Penelusuran Kesalahan Perjalanan Waktu - Gambaran Umum

Penelusuran Kesalahan Perjalanan Waktu - Merekam jejak

Penelusuran Kesalahan Perjalanan Waktu - Memutar ulang pelacakan