Sdílet prostřednictvím


Poznámky k verzi ladění časového cestování

logo pro ladění časových cest s hodinami.

Toto téma obsahuje informace o novinkách v ladění časových cest.

1.11.553

!tt bez argumentů teď zobrazuje krátký text nápovědy a aktuální pozici (místo přechodu na začátek trasování).

Nová metoda datového modelu umožňuje zobrazit historii hodnot místní proměnné. V rámci objektu Frame, například @$curframe pro aktuální rámec, můžete použít . TTD. VariableHistory() pro získání protokolu hodnot zapsaných do proměnné a rozsahu pozic, které proměnná držela.

  • dx -g @$curframe.TTD.VariableHistory().Variables zobrazí seznam názvů místních proměnných.
  • dx -g @$curframe.TTD.VariableHistory().Variables[n].Values zobrazí historii místních proměnných #n.

Rozhraní API pro přehrání TTD je také k dispozici v SDK pro experimentální použití. Toto API je stejné rozhraní, které ladicí program používá k interakci s TTD, a které umožňuje funkcím .Calls() / .Paměť() efektivně shromažďovat data. Další informace najdete v tématu https://aka.ms/ttdsdk.

Pevný

  • Oprava chyby způsobené vyřazením ErrorReporting::PrintError (1.11.553)

1.11.532

Tato verze je údržbová verze, která vylepšuje stabilitu záznamu. Tato verze TTD se shoduje s verzí Windbg z června 2025. Novou funkcí je, že objekt datového modelu Position nyní zaznamenává procento do trasování.

Změněno

  • Různá údržba infrastruktury.
  • Použijte standardní implementaci standardu ISO nestálého jazyka C++. (1.11.518)
  • Přidejte procenta do projekce datového modelu pro pozice. (1.11.514)

Pevný

  • Zvyšte robustnost zpracování dekódovaných instrukcí TTD. (1.11.530)
  • Odeberte použití XSAVE v emulátoru a optimalizujte interní přenos registru. (1.11.509)

1.11.506

Tato verze je menší aktualizací, která se shoduje s vydáním WinDbg z dubna 2025.

Změněno

  • Kliknutím na pozici TTD v datovém modelu (například v seznamu Moduly) přejdete na danou pozici v trasování. (1.11.492)

    Poznámka: V příkazovém okně se nezobrazí aktualizovaná pozice TTD, dokud se neprovede další krok nebo spuštění příkazu.

Pevný

  • Přidání názvu procesu do souboru .out při připojování k PID pro účely řešení potíží (1.11.486)

1.11.481

Přepracovali jsme příkaz !tt, abychom vám poskytli výkonnější způsoby navigace skrz váš sled:

  • Procento zlomků se dá použít k zúžení vyhledávacího prostoru (!tt 23,65)
  • Najít předchozí/další čas, kdy se změní hodnota registru (!tt br ebx)
  • Najít předchozí/další čas, kdy je přistupováno k rozsahu paměti (!tt ba- [addr] [range])
  • Najděte předchozí/další čas, kdy se spuštění přechodí do jiného modulu (!tt bm)
  • Najděte předchozí/následující okamžik, kdy se vykonávání přesune do konkrétního modulu (!tt bm ntdll)

Další informace naleznete v tématu !tt (časová cesta).

Některé významné opravy:

  • "Chyba: zprávy „64-bitová hodnota ztrácí přesnost při převodu na číslo“ při použití @$cursession.TTD.Data.Heap() na 32bitovém trasování zmizely."
  • Analýza možností nápovědy (-?, -help) je nyní správně rozpoznána kdekoli v příkazovém řádku.
  • dx @$cursession.TTD.Calls() už nevyžaduje, aby adresy odpovídaly začátku funkce. Místo toho se adresa mapuje na začátek nejbližší odpovídající funkce.
  • Příkaz TTD správně hlásí cílovou verzi operačního systému z příkazu vertarget.
  • Použití "-monitor" s názvem hostované služby už nezaznamená nesouvisející hostované služby.

Přidáno

  • Registrace zarážek změn v trasování TTD (1.11.431)

Změněno

  • Oprava záznamu služeb podle názvu pomocí režimu monitorování (1.11.477)
  • Zachycení informací o operačním systému skutečného cílového systému pro použití ladicím programem (1.11.473)
  • Oprava přenosu registrů XMM mezi emulátorem a KONTEXTem (1.11.469)
  • Povolit volání dotazů na adresy uvnitř funkce (1.11.459)
  • Podpora symbolů jako adresy/velikosti v příkazovém řádku !tt (1.11.454)
  • Vylepšení konzistence a rozšíření možností navigačních příkazů TTD (1.11.453)
  • Vylepšení konzistence databáze modulů v tvář poškozeným datům (1.11.430)

Pevný

  • Přidání názvu procesu do výstupu při připojování k PID (1.11.486)
  • TTD. Data.Heap() hlásí "Chyba: 64bitová hodnota ztratí přesnost při převodu na číslo" v některých případech (1.11.471)
  • Zlepšení spolehlivosti nahrávání procesu s povolenými stínovými zásobníky (1.11.466)
  • Přidání navigace modulu pomocí !tt bm a datového modelu (1.11.462)
  • Opravte některé problémy s analýzou příkazového řádku. (1.11.444)
  • Oprava lodsd, načtení dvojslova na adrese (vynulování horní části registru rax) (1.11.434)
  • Oprava některých chyb knihovny libfuzzer (1.11.433)

1.11.429

Tato aktualizace TTD obsahuje několik oprav chyb spolu s některými interními změnami, které zlepšují spolehlivost.

Poznámka: 1.11.410 zavedla regresi v emulaci instrukce Intel/AMD LODSD. Oprava této regrese přijde v příští verzi.

Stanovuje:

  • Vylepšení odolnosti při čtení paketů a další různorodé změny ke zlepšení spolehlivosti
  • Opravte regresi při emulaci instrukce AVX VBROADCAST[I/F]128.
  • Opravte přístup k záznamům o výjimce v ARM64 v novějších buildech Windows.

1.11.410

Vylepšená přístupnost: Uživatelské rozhraní Progress UI se teď správně škáluje se změnami velikosti textu.

Příkaz @$cursession.TTD.Calls() v ladicím nástroji teď podporuje zástupné znaky, které odpovídají velkému počtu funkcí. Teď je možné zadat dotaz na velký počet funkcí (@$cursession.TTD.Calls("kernel32!*")).

Automatizace: Nová -onMonitorReadyEvent možnost příkazového řádku označuje, kdy je monitor záznamu (-monitor přepínač) připravený k zaznamenání nových procesů.

Stanovuje:

  • Opravte některé podmínky časování při inicializaci záznamu.
  • Opravte způsob záznamu syscalls, aby přerušovací body fungovaly správně.
  • Opravte několik problémů souvisejících se selektivním záznamem modulu.

Úpravy ARM64:

  • Opravili jsme chybu, která bránila záznamu TTD na prostých procesorech ARM64v8.0.
  • Vylepšili jsme hlášení chyb při pokusu o použití trasování procesu x86 nebo x64 na ARM64.

Opravy AMD/Intel (včetně některých problémů hlášených Googlem):

  • Opravili jsme nesprávnou emulaci LODS: Místo vynulování nepoužívaných bitů RAX nyní jsou správně zachovány.
  • Byla opravena emulace instrukce pop ax v procesech x86/x64, která nesprávně nulovala horní bity úplného registru (například pop ax vymaže horní části raxu).
  • Přímá emulace instrukce XGETBV (rychlejší).
  • Přímá emulace všech pohybů AVX512 SIMD (rychlejší).

1.11.316

Opravili jsme regresi, která způsobovala občasné chybové ukončení při záznamu programů s dlouhou nepřerušovanou instrukční sekvencí náročných na data.

Úpravy ARM64:

  • Nahrávání v procesech ARM64, které mají povolenou funkci PAC, je nyní podporováno.
  • Opravili jsme instrukce ANDS a TST, které nevymazávaly příznaky přenosu a přetečení.

Opravy AMD/Intel:

  • Opravili jsme chybu, kdy TTD nesprávně emuloval xchg r8, rax a xchg r8w, ax jako NOP.

1.11.304

TTD nyní implementuje a veřejně publikuje rozhraní API pro řízení nahrávače během procesu živého nahrávání. Dokumentaci a ukázku najdete na GitHubu.

TTD se nyní může spustit i s vypnutým záznamem pomocí nového přepínače -recordMode. TTD ve výchozím nastavení používá -recordMode Automatic, což způsobí zaznamenání všech vláken. Pokud je zadáno -recordMode Manual, TTD se vloží do cílového procesu, ale nic nezaznamená, dokud k tomu nebude vyzváno prostřednictvím volání API.

Záznam je teď možné omezit na konkrétní sadu modulů pomocí -module přepínače. V některých scénářích může toto omezení vést k podstatně rychlejšímu nahrávání a menším trasovacím souborům. Může být zadáno více než jeden -module přepínač.

V distribuci jsou nyní zahrnuty komponenty pro záznam a přehrávání. V případě nekompatibility mezi ladicím programem a rekordérem příkazového řádku nebo chybě při přehrávání lze komponenty přehrávání zkopírovat do ladicího programu jako dočasné řešení, dokud nebude vydán nový ladicí program.

Umístění nainstalovaného souboru najdete v PowerShellu spuštěním následujícího příkazu:

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

Přidáno

  • Přidání přepínače -recordmode pro povolení injektáže bez automatického záznamu (1.11.296)
  • Přidejte přepínač -module a použijte ho k vytvoření SR konfigurace (1.11.291)
  • Zaznamenávání uživatelských dat pomocí API během procesu do datového modelu (1.11.286)
  • Přidejte nový TTDLiveRecorder.dll a připojte ho spolu s TTDRecordCPU.dll (1.11.283)
  • Přidání komponent pro opětovné přehrání do MSIX a oprava vyhledávání SDK (1.11.265)

Změněno

Žádná

Pevný

  • Alternativní řešení chyby v serializátoru JSON nlohmann, který se používá v některých interních nástrojích (1.11.281)
  • Přizpůsobte zarovnání řetězce, aby se zabránilo vzácné chybě CRT (1.11.279)
    • Hlášeno a opraveno v kódových základnách Visual Studio a operačního systému.
  • Několik malých oprav ze zpráv o chybách programu Watson (1.11.276)
  • Oprava regrese, která může v některých případech způsobit poškození trasovacího souboru (1.11.264)

Známé problémy

  • Na ARM64 kompilátor nedokáže probůlat více vysokofrekvenčních funkcí, což může v extrémních případech způsobit, že zapisovači dojde místo na zásobníku a dojde k chybě.

1.11.261

Mezi velmi vhodné změny v této verzi patří:

  • [ARM64] Opravili jsme chování instrukcí SXTL, SQXTN2, SQXTUN2, UQXTN2, XTN2 a TRN1 při použití cílového registru jako zdroje.
  • [ARM64] Opravili jsme problém, který způsoboval, že ladicí program zobrazoval registry SIMD s nižšími 64 bity duplikovanými do vysokých 64 bitů.
  • [AMD64] Opravy emulace AVX512 pro procesory AMD Zen4 (registry byly poškozeny).

Změněno

  • Implementujte nový systém správy verzí speciálně pro emulátor. (1.11.260)

Pevný

  • Opravte chybné pokyny ARM64, kde se cílový registr používá také jako zdroj. (1.11.261)
  • Opravte alternativní řešení Zen4 pro přímé návraty do emulátoru. (1.11.222)

1.11.202

Tato verze řeší několik problémů, ke kterým došlo při nahrávání služeb nebo spuštění procesu monitorování prostřednictvím -monitor přepínače. Zároveň z produktu odebere podporu nahrávání ARM32.

Změněno

  • Zmenšete binární velikost propojením komponent TTD s UCRT jako knihovnou DLL. (1.11.191)

Pevný

  • Opravit zaznamenávání služeb (1.11.193)
  • Opravte několik problémů při použití nástroje -monitor. (1.11.189)
  • Oprava rámce zásobníku funkce, která zachovává nevolatilní registry při spouštění záložních operací na platformě x64 (1.11.188)
  • Znovu povoleno ukládání výstupu do vyrovnávací paměti pro TTD (1.11.187)
  • Opravit zpracování popisovače skupinových politik v ProcessMonitorServeru (1.11.179)

Odstraněno

  • Odebrání kódu záznamu ARM32 z úložiště (1.11.198)

1.11.173

Tato verze zvyšuje viditelnost určitých chybových zpráv tím, že je extrahuje ze souboru .out a vytiskne je do konzoly. Opravuje také vzácné selhání během přehrávání trasových záznamů.

Změněno

  • Extrahování a tisk chybových zpráv ze souboru .out (1.11.173)

Pevný

  • Opravte konflikt souborů při čtení souboru .out z samostatného procesu. (1.11.171)
  • Oprava vzácného výpadku během přehrávání sledování (1.11.166)

1.11.163

Tato verze přidává podporu pro zaznamenávání procesů x86 na počítačích x64.

Změněno

  • Opravit nahrávání x86 při instalaci x64 TTD (1.11.163)

Pevný

  • Vyčištění EULA (1.11.161)

1.11.159

Tato verze je první veřejnou verzí záznamu příkazového řádku. Kromě několika změn potřebných k povolení veřejné verze záznamu příkazového řádku obsahuje tato verze také několik oprav chyb, včetně několika oprav emulátoru procesoru.

Nový -timestampFileName přepínač umožňuje generování souboru .run založené na časovém razítku. Tento přepínač je užitečný, když nahráváte mnoho instancí stejného procesu a chcete minimalizovat dobu spuštění záznamu.

Změněno

  • Zvolte výchozí režim injektáže za běhu na základě toho, který tracer se používá (1.11.156)
  • Přidání přepínače pro povolení generování souboru .run založeného na časovém razítku (1.11.155)
  • Přidejte EULA a -accepteula do TTD (1.11.154)
  • Přidání ProcLaunchMon.sys do MSIX (1.11.153)
  • Vytvoření MSIX a MSIXBUNDLE pro každou architekturu (1.11.152)
  • Opravte několik problémů, které se objevily při testování TTD vytvořené pomocí jazyka Clang. (1.11.146)
  • Opravy jazyka Clang pro TTDAnalyze (1.11.144)

Pevný

  • Přečtěte si zpětnou vazbu k instalaci aplikací / veřejné verzi (1.11.159)
  • Zpětná vazba RC (1.11.157)
  • Vyhněte se poškození nulového registru inicializací RegisterInfo tak, aby odkazovalo na jímku. (1.11.149)
  • Opravte instrukce TST okamžitě a vylepšete test jednotek tak, aby ho pokrývala a další. (1.11.148)
  • Konsolidace rozhodnutí o chráněném procesu a zakázání použití chráněných procesů (1.11.147)

1.11.138

Změněno

  • Vytvořte MSIX záznamníku (1.11.138)
  • Opravte všechny problémy, aby jazyk Clang mohl sestavit TTD. (1.11.137)
  • Zavedení -monitor X jako způsob, jak zaznamenat proces při spuštění (1.11.116)

Pevný

  • Oprava emulace ARM64 CMP ZR (1.11.128)
  • Oprava emulace AVX512 na procesorech Zen4 AMD (1.11.127)
  • Oprava mechanismu, který TTD používá k vyhledání souborů pro konkrétní procesor (1.11.121)
  • Oprava regrese TTD x86 (TTDRecordCPU.dll se nepodařilo načíst) (1.11.110)
  • Oprava návratu k nativní cestě v ARM64, aby se nepoškodil X28 (1.11.109)

Viz také

Debugging časového cestování – přehled

Time Travel Debugging – záznamník příkazového řádku