Udostępnij przez


Informacje o wersji debugowania podróży w czasie

logo debugowania podróży czasowej z zegarem.

Ten temat zawiera informacje na temat nowości w debugowaniu podróży w czasie.

1.11.553

!tt bez argumentów wyświetla teraz krótki tekst pomocy i bieżące położenie (zamiast przechodzić na początek śledzenia).

Nowa metoda modelu danych umożliwia wyświetlanie historii wartości zmiennej lokalnej. W obiekcie Frame, takim jak @$curframe dla bieżącej ramki, można użyć polecenia . TTD. VariableHistory() w celu pobrania dziennika wartości zapisanych w zmiennej i zakresu pozycji, w których zmienna przechowywała wartość.

  • dx -g @$curframe.TTD.VariableHistory().Variables wyświetla listę lokalnych nazw zmiennych.
  • dx -g @$curframe.TTD.VariableHistory().Variables[n].Values wyświetla historię #n zmiennej lokalnej.

Interfejs API odtwarzania TTD jest również dostępny w eksperymentalnym zestawie SDK. Ten interfejs API jest tym samym interfejsem API, którego debuger używa do interakcji z TTD i co umożliwia . Wywołania() / . Pamięć() do wydajnego zbierania danych. Aby uzyskać więcej informacji, zobacz https://aka.ms/ttdsdk.

Stały

  • Naprawa awarii spowodowana wycofaniem ErrorReporting::PrintError (1.11.553)

1.11.532

Ta wersja jest wydaniem konserwacji, który wprowadza ulepszenia w zakresie rejestrowania niezawodności. Ta wersja TTD pokrywa się z wersją Windbg z czerwca 2025 r. Jedną z nowych funkcji jest to, że obiekt modelu danych "Pozycja" teraz raportuje procent w kontekście śledzenia.

Zmienione

  • Inna konserwacja infrastruktury.
  • Użyj standardowej implementacji standardu ISO w języku C++ volatile. (1.11.518)
  • Dodaj procent do projekcji modelu danych "Position". (1.11.514)

Stały

  • Zwiększ niezawodność obsługi dekodowanych instrukcji TTD. (1.11.530)
  • Usuń użycie XSAVE w emulatorze i zoptymalizuj transfer rejestru wewnętrznego. (1.11.509)

1.11.506

Ta wersja wis wersji pomocniczej zbiega się z wydaniem WinDbg z kwietnia 2025 r.

Zmienione

  • Kliknięcie pozycji TTD w modelu danych (na przykład na liście Moduły) powoduje przejście do tej pozycji w śladzie. (1.11.492)

    Uwaga: okno polecenia nie będzie pokazywać zaktualizowanej pozycji TTD do momentu wykonania następnego kroku lub uruchomienia polecenia.

Stały

  • Dodaj nazwę procesu do pliku .out przy dołączaniu do PID, aby ułatwić rozwiązywanie problemów. (1.11.486)

1.11.481

Odświeżyliśmy polecenie !tt, aby zapewnić bardziej zaawansowane sposoby nawigowania po śladzie:

  • Wartości procentowe ułamkowe mogą służyć do zawężenia obszaru wyszukiwania (!tt 23,65)
  • Znajdź poprzedni/następny raz, gdy rejestr zmienia wartość (!tt br ebx)
  • Znajdź czas poprzedniego/następnego dostępu do zakresu pamięci (!tt ba- [addr] [range])
  • Znajdź poprzednią/następną zmianę wykonywania do innego modułu (!tt bm)
  • Znajdź poprzednie/następne wykonanie, gdy przechodzi do określonego modułu (!tt bm ntdll)

Aby uzyskać więcej informacji, zobacz !tt (podróż czasowa).

Niektóre istotne poprawki:

  • "Błąd: wartość 64-bitowa traci precyzję konwersji na liczbę" komunikatów podczas używania @$cursession.TTD.Data.Heap() śledzenia 32-bitowego znikną.
  • Analizowanie opcji Pomocy (-?, -help) jest teraz poprawnie wykrywane w dowolnym miejscu w wierszu polecenia.
  • dx @$cursession.TTD.Calls() nie wymaga już, aby adresy odpowiadały początkowi funkcji. Zamiast tego adres jest mapowany na początek najbliższej zgodnej funkcji.
  • TTD poprawnie zgłasza wersję docelowego systemu operacyjnego z polecenia vertarget.
  • Używanie "-monitor" z nazwą hostowanej usługi nie rejestruje już niepowiązanych usług hostowanych.

Dodane

  • Rejestrowanie punktów przerwania zmian w śladach TTD (1.11.431)

Zmienione

  • Napraw rejestrowanie usług według nazwy przy użyciu trybu monitora (1.11.477)
  • Przechwyć informacje o systemie operacyjnym rzeczywistego systemu docelowego do użycia przez debuger (1.11.473)
  • Napraw transfer rejestrów XMM między emulatorem a CONTEXT (1.11.469)
  • Zezwalaj na wywołania zapytań względem adresów wewnątrz funkcji (1.11.459)
  • Obsługa symboli jako adresów/rozmiarów w wierszu polecenia !tt (1.11.454)
  • Zwiększanie spójności i rozszerzanie możliwości poleceń nawigacji TTD (1.11.453)
  • Zwiększanie spójności bazy danych modułu w obliczu uszkodzonych danych (1.11.430)

Stały

  • Dodawanie nazwy procesu do danych wyjściowych podczas przyłączania się do PID (1.11.486)
  • TTD. Data.Heap() zgłasza komunikat "Błąd: wartość 64-bitowa traci precyzję konwersji na liczbę" w niektórych przypadkach (1.11.471)
  • Poprawa niezawodności rejestrowania procesu z włączonymi stosami cieni (1.11.466)
  • Dodawanie nawigacji modułu za pomocą programu !tt bm i modelu danych (1.11.462)
  • Rozwiąż niektóre problemy z analizowaniem wiersza polecenia. (1.11.444)
  • Popraw lodsd, załaduj podwójną liczbę pod adresem (wyzeruj górną część rax) (1.11.434)
  • Naprawianie niektórych usterek libfuzzer (1.11.433)

1.11.429

Ta aktualizacja TTD zawiera kilka poprawek błędów wraz z pewnymi zmianami wewnętrznymi w celu zwiększenia niezawodności.

Uwaga: 1.11.410 wprowadziła regresję w emulacji instrukcji Intel/AMD LODSD. Poprawka tej regresji zostanie udostępniona w następnej wersji.

Poprawki:

  • Zwiększ odporność odczytu pakietów i wprowadź inne zmiany w celu poprawy niezawodności.
  • Naprawiono regresję w emulacji instrukcji AVX VBROADCAST[I/F]128.
  • Napraw dostęp do rekordu wyjątków na architekturze ARM64 w nowszych wersjach kompilacji systemu Windows.

1.11.410

Ulepszona dostępność: interfejs użytkownika Progress UI jest teraz prawidłowo skalowany wraz ze zmianami rozmiaru tekstu.

Polecenie @$cursession.TTD.Calls() w debugerze obsługuje teraz symbole wieloznaczne zgodne z dużą liczbą funkcji. Teraz można wykonywać zapytania dotyczące dużej liczby funkcji (@$cursession.TTD.Calls("kernel32!*")).

Automatyzacja: nowa -onMonitorReadyEvent opcja wiersza polecenia wskazuje, kiedy monitor nagrywania (-monitor przełącznik) jest gotowy do rejestrowania nowych procesów.

Poprawki:

  • Napraw niektóre warunki wyścigu podczas inicjowania rejestratora.
  • Napraw sposób rejestrowania wywołań systemowych, aby punkty przerwania działały poprawnie.
  • Rozwiąż wiele problemów związanych z selektywnym rejestrowaniem modułu.

Poprawki ARM64:

  • Usunięto usterkę uniemożliwiającą rejestrowanie TTD na zwykłych procesorach ARM64v8.0.
  • Ulepszono komunikaty podczas próby użycia na platformie ARM64 śladu procesu x86 lub x64.

Poprawki AMD/Intel (w tym niektóre problemy zgłaszane przez firmę Google):

  • Naprawiono niepoprawną emulację LODS: Zamiast usuwać nieużywane bity RAX, są one teraz poprawnie zachowywane.
  • Naprawiono emulację instrukcji "pop ax" w procesach x86/x64, która niepoprawnie zerowała górne bity pełnego rejestru (na przykład "pop ax" wyczyściła górne fragmenty rax).
  • Bezpośrednia emulacja instrukcji XGETBV (szybciej).
  • Bezpośrednie emulowanie wszystkich ruchów SIMD AVX512 (szybsze).

1.11.316

Naprawiono regresję powodującą sporadyczne awarie podczas rejestrowania programów z długimi nieprzerwanymi sekwencjami instrukcji z dużą liczbą danych.

Poprawki ARM64:

  • Rejestrowanie w procesach ARM64 z włączoną funkcją PAC jest teraz obsługiwane.
  • Naprawiono instrukcje ANDS i TST, które nie usuwały flag przenoszenia i przepełnienia.

Poprawki AMD/Intel:

  • Usunięto usterkę, w której TTD niepoprawnie emulował "xchg r8,rax" i "xchg r8w,ax" jako operację NOP.

1.11.304

TTD teraz implementuje i udostępnia publicznie interfejs API, aby kontrolować rejestrator w ramach procesu nagrywanego na żywo. Dokumentację i przykład można znaleźć w witrynie GitHub.

Funkcja TTD może teraz zainicjować się przy wyłączonym nagrywaniu, korzystając z nowego przełącznika -recordMode. Domyślnie funkcja TTD używa -recordMode Automaticelementu , co powoduje zarejestrowanie wszystkich wątków. Jeśli -recordMode Manual zostanie określony, następnie TTD wstrzykiwa do procesu docelowego, ale nie rejestruje niczego, dopóki nie zostanie poinformowany, aby to zrobić za pośrednictwem wywołania interfejsu API.

Nagrywanie można teraz ograniczyć do określonego zestawu modułów przy użyciu przełącznika -module . W niektórych scenariuszach to ograniczenie może spowodować znaczne szybsze rejestrowanie i mniejsze pliki śledzenia. Można określić więcej niż jeden -module przełącznik.

Pasujące składniki nagrywania i odtwarzania są teraz uwzględnione w dystrybucji. W przypadku niezgodności między debugerem a rejestratorem poleceń tekstowych, lub usterką odtwarzania, składniki odtwarzania można skopiować do folderu instalacyjnego debugera jako tymczasowe obejście do chwili wydania nowej wersji debugera.

Zainstalowaną lokalizację pliku można znaleźć w programie PowerShell, uruchamiając następujące polecenie:

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

Dodane

  • Dodaj przełącznik -recordmode, aby włączyć iniekcję bez automatycznego rejestrowania (1.11.296)
  • Dodaj przełącznik -module i użyj go, aby utworzyć konfigurację SR (1.11.291)
  • Projektuj niestandardowe dane zarejestrowane przez interfejs API przetwarzania do modelu danych (1.11.286)
  • Dodaj nowy TTDLiveRecorder.dll i podłącz go wraz z TTDRecordCPU.dll (1.11.283)
  • Dodawanie składników odtwarzania do pliku MSIX i poprawki wyszukiwania zestawu SDK (1.11.265)

Zmienione

żadne

Stały

  • Obejście błędu w serializatorze JSON nlohmann, wykorzystywanym w niektórym wewnętrznym narzędziu (1.11.281)
  • Dostosuj wyrównanie ciągu, aby uniknąć rzadkiej usterki CRT (1.11.279)
    • Zgłoszone i naprawione w repozytoriach kodu VS i systemu operacyjnego.
  • Kilka małych poprawek z raportów awarii programu Watson (1.11.276)
  • Napraw regresję, która może spowodować uszkodzenie pliku śledzenia w niektórych przypadkach (1.11.264)

Znane problemy

  • W usłudze ARM64 kompilator nie może wywołać wielu funkcji o wysokiej częstotliwości, co w skrajnych przypadkach może spowodować, że rejestrator zabraknie miejsca na stosie i awarii.

1.11.261

Istotne zmiany w tej wersji obejmują:

  • [ARM64] Naprawiono zachowanie instrukcji SXTL, , SQXTN2SQXTUN2, UQXTN2XTN2 iTRN1, gdy rejestr docelowy jest używany jako źródło.
  • [ARM64] Rozwiązano problem, który spowodował, że debuger wyświetlał rejestry SIMD z małymi 64 bitami zduplikowanymi do wysokich 64 bitów.
  • [AMD64] Poprawki emulacji AVX512 dla procesorów Zen4 firmy AMD (rejestry były uszkodzone).

Zmienione

  • Zaimplementuj nowy system przechowywania wersji przeznaczony specjalnie dla emulatora. (1.11.260)

Stały

  • Napraw wadliwe instrukcje ARM64, w których rejestr docelowy jest również używany jako źródło. (1.11.261)
  • Popraw rozwiązanie dotyczące Zen4 służące do bezpośrednich powrotów do emulatora. (1.11.222)

1.11.202

W tej wersji rozwiązano wiele problemów napotkanych podczas rejestrowania usług lub uruchamiania procesu monitorowania za pośrednictwem przełącznika -monitor . Usuwa również obsługę nagrywania arm32 z produktu.

Zmienione

  • Zmniejsz rozmiar binarny, łącząc składniki TTD z biblioteką DLL UCRT. (1.11.191)

Stały

  • Napraw rejestrowanie usług. (1.11.193)
  • Rozwiąż kilka problemów podczas korzystania z -monitora. (1.11.189)
  • Napraw ramkę stosu funkcji, która zachowuje nietrwałe dane podczas uruchamiania procedur awaryjnych na x64 (1.11.188)
  • Ponowne włączanie buforowania danych wyjściowych dla TTD (1.11.187)
  • Napraw obsługę uchwytu obiektu zasad grupy na serwerze ProcessMonitorServer (1.11.179)

Usunięte

  • Usuń kod rejestrowania arm32 z repozytorium (1.11.198)

1.11.173

Ta wersja zwiększa widoczność niektórych komunikatów o błędach, wyodrębniając je z pliku .out i drukując je w konsoli. Naprawiono również rzadką awarię podczas ponownego odtwarzania śladu.

Zmienione

  • Wyodrębnianie i drukowanie komunikatów o błędach z pliku out (1.11.173)

Stały

  • Rozwiąż konflikt pliku podczas odczytywania pliku .out z oddzielnego procesu. (1.11.171)
  • Naprawa rzadkich awarii podczas ponownego odtwarzania śledzenia. (1.11.166)

1.11.163

W tej wersji dodano obsługę rejestrowania procesów x86 na maszynach x64.

Zmienione

  • Naprawiono nagrywanie x86 przy użyciu instalacji TTD x64 (1.11.163)

Stały

  • Oczyszczanie umowy EULA (1.11.161)

1.11.159

Ta wersja jest pierwszą publiczną wersją rejestratora wiersza polecenia. Wraz z kilkoma zmianami wymaganymi do włączenia publicznej wersji rejestratora wiersza polecenia ta wersja zawiera również wiele poprawek błędów, w tym kilka poprawek emulatora procesora CPU.

Nowy -timestampFileName przełącznik umożliwia generowanie plików .run na podstawie sygnatury czasowej. Ten przełącznik jest przydatny podczas rejestrowania wielu wystąpień tego samego procesu i chce zminimalizować czas uruchamiania nagrywania.

Zmienione

  • Wybierz domyślny tryb wstrzykiwania w czasie wykonywania w zależności od używanego trasera (1.11.156)
  • Dodaj przełącznik do włączenia generowania pliku .run na podstawie znacznika czasu (1.11.155)
  • Dodaj EULA i -accepteula do TTD (1.11.154)
  • Dodaj ProcLaunchMon.sys do MSIX (1.11.153)
  • Tworzenie osobnych paczek MSIX i MSIXBUNDLE dla każdej architektury (1.11.152)
  • Rozwiąż wiele problemów, które pojawiły się podczas testowania TTD skompilowanego za pomocą języka Clang. (1.11.146)
  • Poprawki języka Clang dla TTDAnalyze (1.11.144)

Stały

  • Przejrzyj opinie dotyczące instalacji aplikacji /publicznej wersji (1.11.159)
  • Opinie dotyczące RC (1.11.157)
  • Unikaj uszkodzenia rejestru Zero, inicjując RegisterInfo, aby wskazywał na Sink. (1.11.149)
  • Napraw instrukcję TST natychmiast i ulepsz test jednostkowy, aby go pokryć i nie tylko. (1.11.148)
  • Konsolidacja decyzji o procesie chronionym i wyłączanie użycia chronionego procesu (1.11.147)

1.11.138

Zmienione

  • Tworzenie rejestratora MSIX (1.11.138)
  • Rozwiąż wszystkie problemy, aby język Clang mógł tworzyć TTD. (1.11.137)
  • Wprowadź -monitor X jako metodę rejestrowania procesu podczas jego uruchamiania (1.11.116)

Stały

  • Naprawiono emulację ARM64 "CMP ZR" (1.11.128)
  • Napraw emulację AVX512 na procesorach Zen4 firmy AMD (1.11.127)
  • Napraw mechanizm TTD używany do znajdowania plików dla określonego procesora CPU (1.11.121)
  • Napraw regresję x86 TTD (TTDRecordCPU.dll nie można załadować) (1.11.110)
  • Napraw powrót do ścieżki natywnej na ARM64, aby nie uszkodzić rejestru X28 (1.11.109)

Zobacz też

Debugowanie podróży w czasie — omówienie

Debugowanie podróży w czasie — rejestrator wiersza polecenia