Penelusuran Kesalahan Perjalanan Waktu - utilitas baris perintah TTD.exe
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 mungkin berisi informasi terkait identitas pribadi atau keamanan
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.
-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.
Pengaturan terkait peristiwa
-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.
-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
- Menu aplikasi kecil ditampilkan yang menunjukkan bahwa pelacakan aktif.
- 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.
- 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
- 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
Mulai aplikasi target, dalam contoh notepad ini.
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
...
- 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.
- 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
...
- 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.
- 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
- 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.
- 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
- 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk