Aracılığıyla paylaş


Zaman Yolculuğu Hata Ayıklama - TTD.exe komut satırı yardımcı programı

Saat içeren Zaman yolculuğu hata ayıklama logosunun ekran görüntüsü.

Bu makalede, Zaman Yolculuğu Hata Ayıklama (TTD) izlemelerini kaydetmek için TTD.exe komut satırı yardımcı programının ne zaman ve nasıl kullanılacağı açıklanmaktadır. TTD.exe komut satırı yardımcı programı, uygulama veya işlem yürütmeyi kaydetmenize, izleme dosyasına kaydetmenize ve kod yürütme sorunlarını tanılamak için WinDbg'de yeniden yürütmenize olanak tanır.

Bu makalede şunları öğreneceksiniz:

  • WinDbg kullanıcı arabirimi yerine TTD.exe ne zaman kullanılır?
  • TTD.exe yükleme ve yapılandırma
  • İzlemeleri kaydetmenin üç yolu (başlatma, ekleme, izleme)
  • Komut satırı seçenekleri ve gelişmiş senaryolar

TTD.exe komut satırı yardımcı programı ne zaman kullanılır?

Time Travel Debugging (TTD), bir uygulamanın veya işlemin kod yürütmesini kaydetmenize ve izleme dosyasına kaydetmenize olanak tanır. Kod yürütmeyle ilgili bir sorunu bulmak için Dosyayı Windows hata ayıklayıcısında oynatabilirsiniz.

Birçok senaryoda, bir uygulamayı veya işlemi kaydetmek için TTD kullanmanın en kolay yolu doğrudan WinDbg kullanıcı arabiriminden yapılır. Time Travel Hata Ayıklama'yı kullanmaya yeni başladıysanız WinDbg arabirimini kullanarak temel bilgileri öğrenmek için Time Travel Hata Ayıklama - Genel Bakış ile başlayın.

Yalnızca TTD komut satırı kaydedicisine ihtiyacınız olan senaryolar olabilir: hata ayıklayıcıyı yüklemeden bilgisayarda kaydetme, gelişmiş kayıt senaryoları, test otomasyonu vb. Bu senaryolarda, URL aracılığıyla yalnızca TTD komut satırı kaydedicisini yükleyebilirsiniz.

TTD kaydı, kaydedilen işlemi etkiler

TTD kaydı, invaziv bir teknolojidir. Uygulamaya ve seçtiğiniz kayıt seçeneklerine bağlı olarak kayıt sırasında çalışan uygulamanın veya işlemin 5x-20x veya daha yavaş olduğunu fark edebilirsiniz.

Oluşturulan izleme dosyaları zaman içinde büyür ve önemli depolama alanı alabilir. İzleme süresini en kısa tutmak için çalışın, ilgilendiğiniz program etkinliğini yakalayın ve ardından izlemeyi mümkün olan en kısa sürede kapatın.

TTD bir işleme eklendikten sonra kendi kendini kaldıramaz. Uygulamayı kapatın veya TTD kaydı tamamlandıktan sonra işlemi sonlandırın. Sistem açısından kritik işlemler için bu eylem işletim sisteminin yeniden başlatılmasını gerektirir.

Önemli

TTD kayıtları bellek içeriğini yakalar ve dosya yolları, kayıt defteri, bellek veya dosya içeriği dahil ancak bunlarla sınırlı olmamak kaydıyla kişisel veya güvenlikle ilgili bilgiler içerebilir. Tam olarak bilgi, kaydedildiği sırada hedef süreç etkinliğine bağlıdır.

TTD.exe komut satırı yardımcı programını indirme ve yükleme (tercih edilen yöntem)

TTD komut satırı yardımcı programını adresinden https://aka.ms/ttd/downloadindirin.

Yükle'yi seçin; TTD indirilir ve yüklenir. TTD komutu sistem yoluna eklenir ve yükleme tamamlandığında komut isteminde kullanılabilir.

İpucu

Yüklemeden sonra yeni bir komut istemi açın ve yüklemenin başarılı olduğunu doğrulamak için yazın ttd.exe -help .

Yüklemede sorunlarla karşılaşırsanız bkz. Uygulama Yükleyicisi dosyasıyla ilgili yükleme sorunlarını giderme.

Bazı bilgisayarlarda Windows 10 için Microsoft Uygulama Yükleyicisi'ni yüklemeniz gerekebilir. Windows'daki Microsoft Store uygulamasında kullanılabilir. Windows Paket Yöneticisi, Windows 10 1809'dan başlayarak Uygulama Yükleyicisi aracılığıyla desteklenir.

TTD.exe komut satırı yardımcı programını indirme ve yükleme (çevrimdışı yöntem)

Tercih edilen yükleme yöntemi Uygulama Yükleyicisi'ni kullanmak olsa da, TTD komut satırı paketini indirebilir ve dosyaları el ile ayıklayabilirsiniz. Bunu yapmanın iki yolu aşağıdadır.

Yüklü bir TTD.exe komut satırı yardımcı programındaki dosyaları ayıklama

TTD komut satırı yardımcı programını zaten yüklediyseniz, dosyaları yüklü konumdan ayıklayabilirsiniz. PowerShell'de, yüklü konumu bulmak için aşağıdaki komutu çalıştırın:

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

Buradan, tüm ikili dosyaları (*.dll, *.exe, *.sys) yeni bir konuma kopyalayabilirsiniz. PowerShell'de bunu gerçekleştirmenin bir yolu aşağıdadır:

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

"c:\myttd" değerini seçtiğiniz hedefle değiştirin. Sonuç şuna benzer (x64 makinesinde):

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 ikili dosyalarının bir alt dizinde olduğunu unutmayın. 32 bit işlemleri kaydetmeniz gerekmiyorsa, bu klasörü silebilirsiniz (ve kopyalamayı önlemek için robocopy komutuna ekleyebilirsiniz /xd x86 ). ARM64 sürümünün alt dizini yoktur.

TTDRecordUI.dll dosyası yalnızca kaydı denetlemek için kullanıcı arabirimini kullanmak istiyorsanız gereklidir. Kullanıcı arabirimini istemiyorsanız bu dosyayı silebilirsiniz.

TTD.exe komut satırı yardımcı programı paketini indirme ve el ile ayıklama

TTD komut satırı yardımcı programını yüklemek istemiyorsanız paketi indirebilir ve dosyaları el ile ayıklayabilirsiniz. Aşağıdaki PowerShell betiği:

  • TTD'nin geçerli sürümünün URL'sini adresinden https://aka.ms/ttd/downloadalır.
  • MSIX paketini indirir.
  • İstenen mimarinin MSIX'ini MSIX paketinden ayıklar.
  • MSIX'ten TTD ikili dosyalarını ayıklar.
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."
}

Yukarıdaki betiği olarak Get-Ttd.ps1kaydettiğinizi varsayarsak, x64 ikili dosyalarını c:\myttd dizinine indirmek için şu şekilde çalıştırın:

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

Veya çıkış dizinini ve mimarisini belirtin:

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

"c:\myttd" veya "c:\myttd-arm64" yerine seçtiğiniz hedefi yazın.

TTD.exe komut satırı yardımcı programını kullanarak bir iz kaydedin

İzlemeyi üç yolla kaydedebilirsiniz:

Yöntem En iyi kullanım alanı: Örnek senaryo
Başlat Belirli bağımsız değişkenlerle yeni bir işlem başlatmak ping.exe gibi bir komut satırı aracını kaydetme
Eklemek Zaten çalışan bir işlemi kaydetme Hizmette veya uzun süre çalışan uygulamada hata ayıklama
Monitör İşlem her başlatıldığında otomatik olarak kaydetme Aralıklı sorunları veya başlatma sorunlarını yakalama

İşlemi kaydetmeye başladıktan sonra, hata ayıklamak istediğiniz sorunu tetikleyin. Sorunlu bir dosya açabilir veya ilgili olaya neden olmak için uygulamadaki belirli bir düğmeyi seçebilirsiniz. Kaydettiğiniz uygulama doğal olarak veya kilitlenerek sona erdiğinde izleme dosyası sonlandırılır.

İpucu

TTD izlemelerinin kaydedilmesi için yönetim hakları gerekir. Genellikle bir yönetici komut isteminden ttd.exe çalıştırırsınız.

WinDbg kullanarak bir zaman yolculuğu izlemesini kaydetme hakkında daha fazla bilgi için bkz. Zaman Yolculuğu Hata Ayıklama - İzleme kaydetme.

İşlem başlatma

-launch <Program> [<arguments>]

Programı başlatın ve takip edin (varsayılan mod).

Bu mod, bağımsız değişkenleri programa geçirmenizi sağlayan tek moddur. Program, TTD.exe (yönetici olarak) ile aynı ayrıcalıklarla başlatılır. Programı normal ayrıcalık kümesiyle kaydetmek için -attach veya -monitor kullanın.

Dahil etmek -launch isteğe bağlıdır, ancak netlik için kullanabilirsiniz.

- veya / ile başlamayan ilk tanınmayan bağımsız değişkenin başlatılacak yürütülebilir yol olduğu varsayılır ve sonraki bağımsız değişkenlerin bu programın bağımsız değişkenleri olduğu varsayılır.

Örneğin, Not Defteri'ni başlatmak ve kaydetmek için kullanın TTD.exe notepad.exe . Not Defteri'ni kapattığınızda izleme durdurulur.

Örnek kullanım için bkz . Senaryo kullanım örnekleri - bir işlemi kaydetme.

İşleme bağlan

-attach <PID>

Çalışmakta olan bir sürece, işlem kimliği ile belirtilen süreci bağlayın. İşlem numaralarını tanımlamak için Görev Yöneticisi'ni veya TaskList yardımcı programını kullanın. Daha fazla bilgi için bkz. İşlem kimliğini bulma.

Örneğin, işlemi başlatmak ve ID'si 21440 olan süreci kaydedip izlemeyi MyTraceFile.run'a kaydetmek için TTD.exe -attach 21440 -out C:\traces\MyTraceFile.run kullanın.

TTD.exeçalıştırmadan önce dizinin var olduğundan emin olun (C:\traces bu örnekte).

Örnek kullanım için bakınız: Senaryo: Çalışan bir işlemi bulma ve ekleme.

bir işlemi izleme

-monitor <Program>

Monitör özelliği, bir programı her başlatıldığında izlemenize ve izini sürmenize olanak tanır. Bu seçeneği kullanmak için ile çıkış konumunun -outtam yolunu belirtmeniz gerekir.

İzlemeyi durdurmak için Ctrl+C tuşlarına basın.

İzlemenin diğer yöntemlerle karşılaştırıldığında başlıca avantajları şunlardır:

  • Hedef uygulamayı normal şekilde başlatabilirsiniz; başlatmak için komut satırını bulmaya gerek yoktur.
  • Hedef uygulama normal ayrıcalıklarıyla çalışır. Uygulamayı doğrudan ttd.exe'den başlatırsanız, yükseltme başlatılır ve bu değişiklik programın davranışını etkileyebilir.
  • Otomasyon için faydalıdır (bir programın başlatılmasını izleyen ve iz toplayan bir betik kullanın).

Birden çok programı izlemek için -monitor seçeneğini birden çok kez belirtebilirsiniz.

Örneğin kullanım, bkz . Senaryo kullanım örnekleri - izleme işlemleri.

Komut satırı seçenekleri

Sözdizimi

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

-? | -help

Komut satırı yardımını görüntüleyin.

Modlar

-launch <Program> [<arguments>]

Programı başlatın ve takip edin (varsayılan mod).

Bu mod, bağımsız değişkenleri programa geçirmenizi sağlayan tek moddur. Seçenek -launch, komut satırındaki son TTD seçeneği olmalıdır; bu seçenekten sonra başlatılacak program ve programın gerektirdiği diğer bağımsız değişkenler gelmelidir. Bir mod belirtmezseniz, araç bunu başlatma olarak ele alır. Örneğin, TTD.exe -out C:\traces ping.exe msn.com başlatma olarak değerlendirilir.

-attach <PID>

Çalışmakta olan bir sürece, işlem kimliği ile belirtilen süreci bağlayın. İşlem kimliklerini tanımlamak için Görev Yöneticisi'ni veya TaskList yardımcı programını kullanın. Daha fazla bilgi için bkz. İşlem kimliğini bulma.

-monitor <Program>

Her başlatıldıklarında (sistem yeniden başlatılana kadar) programları veya hizmetleri izleme. Bu seçeneği kullanmak için ile çıkış konumunun -outtam yolunu belirtmeniz gerekir.

Temel komut satırı seçenekleri

-out <path>

bir izleme dosyası adı veya dizin belirtin. Bir dizin belirtirseniz, zaten var olması gerekir. Bir dosya adı belirtirseniz, dosya adı mevcut olmamalıdır.

-noUI

Kaydı el ile denetlemek için kullanıcı arabirimini devre dışı bırakır. Etkileşimli denetime ihtiyacınız olmayan otomasyon senaryoları için bu seçeneği kullanın.

Bu seçeneği belirlemezseniz, kayıt etkinken küçük bir kullanıcı arabirimi görüntülenir:

İzleme durumunu ve Uygulamadan Çık düğmesini gösteren küçük iki düğmeli TTD kullanıcı arabiriminin ekran görüntüsü.

Kullanıcı arabirimi iki denetim sağlar:

  • İzleme Kapalı - İzlemeyi durdurur ve uygulama çalışmaya devam eder
  • Uygulamadan Çık - Uygulamayı kapatır ve izlemeyi durdurur

-accepteula

EULA kullanıcı lisans sözleşmesini kabul etmek için bu seçeneği kullanın. EULA'yı gözden geçirip kabul ettikten sonra otomasyon senaryolarında bu seçeneği kullanın.

TTD, ilk kez çalıştığında EULA'yı görüntüler. EULA'yı kabul etmek için Y veya N yazın. Kabul edildikten sonra EULA artık başlangıçta görünmez. EULA'yı kabul etmezseniz, TTD kapanır ve bir sonraki çalıştırmada EULA'yı görüntüler.

İzleme denetimi

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

Belirtilen işlem adını, PID'yi veya "tümü" izlemeyi durdurun.

-wait <timeout>

Sistemdeki tüm izleme oturumlarının sona ermesi için belirtilen saniye sayısına kadar bekleyin. Sonsuz beklemek için -1 belirtin.

-tracingOff

İzleme kaydı kapalı olarak uygulamayı başlatır. kullanıcı arabirimi onay kutusunu kullanarak izlemeyi kapatıldıktan sonra yeniden açabilirsiniz.

Ek komut satırı seçenekleri

-children

Hedef işlemi ve hedef tarafından oluşturulan tüm işlemleri kaydedin. Her bir alt işlem, kendi izleme dosyasına kaydedilir.

-cmdLineFilter "<string>"

Komut satırında dize varsa hedef işlemi kaydedin. Bu seçenek yalnızca -monitor modunda çalışır. Komut satırı argümanı, ilgilendiğiniz işlemi benzersiz bir şekilde tanımladığında faydalı olur. Örneğin, -monitor notepad.exe -cmdLineFilter "specialfile.txt" notepad.exe dosyasını yalnızca komut satırında specialfile.txt göründüğünde kaydeder.

-cleanup

İşlem izleyici sürücüsünü kaldırın.

İzleme davranışı ayarları

-timestampFilename

İzleme dosyası adının son bölümüne bir zaman damgası ekler. Örneğin, ping_2023-06-17_103116.run.

Dosya adında zaman damgası ile ping.exe kaydetmek için bu komutu kullanın.

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

Varsayılan olarak, kaydedici kullanılmayan bir dosya adını bulmak için çıkış dizinini sırayla tarar. Kaydedersenizping.exe, kaydedici kullanılmayan bir dosya adı bulana kadar ping01.run, ping02.run vb. denemeye devam eder. Çoğu senaryoda bu adlandırma yöntemi yeterlidir. Ancak, aynı programı birçok kez kaydetmek istiyorsanız, çok sayıda mevcut dosya mevcut olduğunda varsayılan dosya adlandırma algoritması verimsiz hale gelebilir.

-ring

Bir halka arabelleğine yönelik izler. Dosya boyutu, tarafından -maxFilebelirtilen sınırları aşmaz. Kaydın yalnızca belirtilen boyuta uyan son bölümü kaydedilir.

-maxFile <size>

İz dosyasının MB cinsinden maksimum boyutu. Tam izleme modundayken varsayılan değer 1.024 GB ve en düşük değer 1 MB'tır. Kademe arabelleği modunda varsayılan değer 2.048 MB, en düşük değer 1 MB ve maksimum değer 32.768 MB'tır.

32 bit işlemlerde bellek içi halka için varsayılan değer 256 MB'tır.

-maxConcurrentRecordings <count>

Herhangi bir zamanda devam eden maksimum kayıt sayısı. Bu değeri belirtmezseniz, sınırsız sayıda kayıt aynı anda gerçekleşebilir.

-numVCpu <number>

İzleme sırasında rezerve etmek ve kullanmak için sanal CPU sayısını ayarlar. Bu değer, TTD tarafından konuk işleminin belleğine yerleştirilen toplam bellek ek yükünü etkiler. Bu değeri belirtmezseniz, platform başına varsayılan değer x64/ARM64 için 55 ve x86 için 32'dir.

Yalnızca belleğiniz tükeniyorsa bellek etkisini sınırlamak için bu ayarı değiştirin. Değerin numVCpu düşürülmesi izleme performansını ciddi ölçüde etkileyebilir ve yalnızca bellek kullanımı sorunlarına geçici bir çözüm bulmak için yapılmalıdır.

TTD.exe kaydedilemezse veya .out dosya 0 saniyelik bir simülasyon gösteriyorsa, kullanarak -numVCpu kaydın başarılı olması sağlanabilir.

-replayCpuSupport <support>

İzlemeyi yeniden yürüten CPU'lardan beklenen desteği belirtir. Varsayılan ayar, makineler arasındaki izlemelerin taşınabilirliği için önerilir, ancak hedef program tarafından kullanılan belirli yönergelere bağlı olarak daha küçük izleme dosyaları üretmek ve daha hızlı kaydetmek için diğer seçenekleri kullanabilirsiniz.

<support> Değerler

Değer Description
Default Varsayılan CPU desteği, yalnızca yeniden yürütme CPU'sunda yaygın olarak kullanılabilen temel desteği gerektirir.
MostConservative Yeniden yürütme CPU'sunda özel destek gerektirmez. ARM64 CPU üzerinde Intel iz kaydı gibi tamamen farklı bir CPU mimarisi üzerinde yeniden çalıştırılan izler için yeterlidir.
MostAggressive Yeniden yürütme CPU'sunun benzer olduğunu ve kaydetmek için kullanılan CPU'dan eşit veya daha büyük bir özellik olduğunu varsayar.
IntelAvxRequired Yeniden yürütme CPU'sunun AVX'i destekleyen Intel/AMD 64 bit CPU olduğunu varsayar.
IntelAvx2Required Yeniden yürütme CPU'sunun AVX2'yi destekleyen Intel/AMD 64 bit CPU olduğunu varsayar.

İzleme yükünü azaltma

TTD, yapmak üzere tasarlandığı işleri çok verimli bir şekilde yapmasına rağmen (ortalama olarak bir bayt/yönergeden daha azına kodlanmış tam yönerge düzeyi izleme), kayıt sırasında hala belirgin bir ek yük oluşturur. Modern CPU'lar saniyede milyarlarca yönerge yürütebilir ve bu da bir bayt/yönergeyi bile pahalı hale getirir. Çoğu durumda işlemin tamamını kaydetmek gerekli değildir.

İzleme yükünü azaltmak için aşağıdaki seçenekler kullanılabilir:

-module <module name>

Yalnızca belirtilen modülü (comdlg32.dll gibi) ve onun çağırdığı kodu kaydedin. Bu, yürütülebilir dosyanın kendisi veya yürütülebilir dosya tarafından yüklenen herhangi bir DLL olabilir. Bu seçenek birden çok modülü kaydetmek için birden çok kez belirtilebilir.

Bu seçenek kullanıldığında, belirtilen modüllerdeki kod yürütülene kadar hedef işlem tam hızda çalışır. TTD daha sonra yürütme belirtilen modülden ayrılana kadar işlemi kaydeder; bu noktada kayıt kapatılır ve hedef tam hıza döner. Kaydı açmak/kapatmak pahalı olduğundan, belirtilen modül işlemdeki diğer modüllere seslendiğinde TTD kaydı açık bırakır.

-recordmode <Automatic | Manual>

Normalde kayıt, TTD kendisini hedef işleme ekler eklemez başlar ("Otomatik" mod, varsayılan). Programınız, kaydın ne zaman gerçekleşebileceğini denetlemek için TTD'nin işlem içi kayıt API'sini kullanıyorsa, programınız kaydı başlatmak için API'yi çağırana kadar tam hızda çalışmak için "El ile" modunu kullanabilirsiniz.

Bu seçeneklerin kullanılması, kayıt ek yükünün ve izleme dosyası boyutunun önemli ölçüde azalmasına neden olabilir. Bu seçeneklerle kaydedilen bir izde hata ayıklama işlemi, tüm işlemin izinden farklı değildir. İzlemede kaydın kapalı olduğu bir konuma ulaştığınızda, izlemedeki sonraki yönerge kayıt sürdürülürken yürütülen ilk yönergedir.

-passThroughExit

Konuk işleminin çıkış değerini TTD.exe’nin çıkış değeri olarak geçirin. Bu değer, %ERRORLEVEL% değişkeni aracılığıyla toplu iş dosyalarına sunulur. PowerShell ve diğer komut satırı ortamları, işlem çıkış değerini almaya yönelik mekanizmalar da sunar.

-onInitCompleteEvent <eventName>

İzleme başlatma işlemi tamamlandığında bir olayın sinyalle işaretlenmesine izin verir.

Senaryo kullanım örnekleri - bir işlemi kaydetme

Gereksinimlerinize uygun bir senaryo seçin:

Senaryo - Bir Windows uygulamasını başlatma ve kaydetme

Bu senaryoda, Not Defteri'ni başlatır ve bir izleme oluşturursunuz.

  1. Not Defteri'ni -launch başlatmak ve kaydetmek için seçeneğini kullanın.
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. İzlemenin açık olduğunu gösteren küçük bir uygulama menüsü görüntülenir.

İzleme durumunu ve Uygulamadan Çık düğmesini görüntüleyen TTD kullanıcı arabiriminin ekran görüntüsü.

  1. Uygulamayı kapattığınızda bir izleme dosyası oluşturur. Bu örnekte, izleme dosyasının adı notepad01.run'dır.

Senaryo - Geçirilen parametreyle bir Windows uygulamasını başlatma ve kaydetme

Bu senaryoda, ping işlemini başlatır ve adresi parametre olarak ping'e geçirirsiniz.

  1. Bu örnekte, varsayılan mod olduğundan -launch seçeneğini atlayacaksınız.
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. Uygulamayı kapattığınızda bir izleme dosyası oluşturur. Bu örnekte, izleme dosyası ping01.run olarak adlandırılır.

Senaryo - Çalışan bir işlemi bulma ve ona bağlanma

Bu senaryoda Not Defteri'ni başlatır, işlem kimliğini bulur ve çalışan uygulamaya ekleyerek bir izleme oluşturursunuz.

  1. Bu örnekte Not Defteri'nde hedef uygulamayı başlatın.

  2. İşlem kimliğini bulmak için TaskList veya diğer yöntemleri kullanın. Daha fazla bilgi için bkz. İşlem kimliğini bulma.

C:\TTD> TaskList
...
Notepad.exe                  21440 Console                    1     73,020 K
...
  1. İşlem kimliğini -attach seçeneğini kullanarak bağlamak ve kaydetmek için kullanın. İsteğe bağlı olarak, izleme dosyası için bir dosya adı -out belirtin.
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

Senaryo - Ana işlemi ve çocuk işlemlerini kaydetme

Bu senaryoda, bir ebeveyn süreci ve alt süreçlerini kaydediyorsunuz. Bazı uygulamalar birçok alt işlem kullandığından, çocukları içeren aile izleme dosyası oldukça büyük olabilir.

  1. Seçenek -children ve kaydedilecek üst uygulamanın adını belirtin.

Bu örnek, bir alt işlem olarak başlatmayı cmd.exe kaydederping.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. Birden çok izleme dosyası oluşturulur: üst işlem için bir dosya ve her alt işlem için bir izleme dosyası. WinDbg aynı anda yalnızca bir izleme dosyası açar, bu nedenle aynı anda hata ayıklamak istiyorsanız her izleme için ayrı WinDbg örnekleri çalıştırmanız gerekir.

Senaryo kullanım örnekleri - izleme işlemleri

Senaryo - Program açılışları ve kayıt başlatma için izleme

Bu senaryoda, sistem yeniden başlatılana veya Ctrl+C ile ttd.exe'dan çıkana kadar şu anda çalışan tüm örneklerini ve gelecekteki notepad.exe örneklerini kaydetmek için seçeneğini kullanın -monitor . Monitör seçeneğine -out ihtiyacınız vardır ve çıkış klasörü zaten mevcut olmalıdır.

  1. notepad.exe'nin mevcut ve gelecekteki örneklerini izleyin ve takip edin.
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. Bu örnekte, izleme başladıktan sonra iki notepad.exe örneği yüklersiniz. İlgilendiğiniz etkinliği yakaladığınızda, kaydı durdurmak için komut istemindeki CTRL-C kullanın.

Senaryo - iki programın başlatılmasını izleme

Bu senaryoda, iki uygulamayı izlemek ve kaydetmek için seçeneğini kullanın -monitor .

  1. notepad.exe ve ping.exe'nin şu anki ve gelecekteki örneklerini izleyin ve takip edin.
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. Bu örnekte, izleme başlamadan önce notepad.exe'yi, izleme başladıktan sonra ise ping.exe'yi yüklüyorsunuz. İlgilendiğiniz etkinliği yakaladığınızda, kaydı durdurmak için komut istemindeki CTRL-C kullanın.

İzleme dosyalarıyla çalışmaya yönelik ipuçları

  • İzlemeleri başkalarıyla paylaşırken yalnızca .run dosyasını paylaşın. Dizin dosyası (.idx) .run dosyası kadar büyük olabilir ve WinDbg izleme dosyasını yüklediğinde otomatik olarak oluşturulur.
  • Başkalarıyla işbirliği yaparken sorunla ilgili tüm ilgili izleme konumlarını paylaşın. İşbirlikçi, kodun çalıştırılması sırasında tam olarak o noktaya gitmek için !tt x:y komutunu kullanabilir. Olası sorunun oluştuğu yeri izlemek için hata açıklamalarına zaman konum aralıkları ekleyebilirsiniz.
  • TTD ile ilgili bir sorun bildirirken,.run dosyasını sağlarsanız,.out dosyasını da sağlayın. Bu ekleme, kayıt işleminin düzgün çalıştığının onaylanmasını sağlar.
  • İzleme dosyaları (.run) iyi sıkıştırılabilir.

TTD.exe kaydıyla ilgili sorun giderme

İzleme dosyası hataları oluşabilir. Daha fazla bilgi için bkz. Zaman Yolculuğu Hata Ayıklama - Sorun Giderme.

Sorun giderme için .out dosyasını kullanabilirsiniz. Örnek out dosyası, sıfır çıkış koduyla biten işlevsel bir izleme gösterir.

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 dosya içeriğinin çoğu, zaman yolculuğu hata ayıklama ekibi tarafından kayıt hatalarını giderme amacıyla dahili olarak kullanılır. Aşağıdaki bilgiler izleme dosyasıyla çalışan diğer kişiler için yararlı olabilir.

  • Bazı hata iletileri yalnızca .out dosyasında görüntülenir ve hatanın ayrıntılarını belirlemenize yardımcı olabilir.
  • Kaydın başlatılıp durdurulduğu duvar saati zamanının göstergesi
  • Kayıt oturumunun ne kadar sürdüğü (simülasyon süresi)
  • Kaydın başlatma (komut satırı ile) veya kayıt ekleme olup olmadığı
  • İşletim sistemi sürümü