다음을 통해 공유


타임 트래블 디버깅 릴리스 정보

시계가 있는 시간 이동 디버깅 로고입니다.

이 항목에서는 시간 이동 디버깅의 새로운 기능을 설명합니다.

1.11.553

!tt 이제 인수가 없으므로 간단한 도움말 텍스트와 현재 위치가 표시됩니다(추적의 시작 부분으로 이동하는 대신).

새 데이터 모델 메서드를 사용하면 지역 변수 값의 기록을 볼 수 있습니다. 현재 프레임의 @$curframe와 같은 Frame 개체 내에서 .TTD.VariableHistory()를 사용하여 변수에 기록된 값의 로그와 변수가 그 값을 가졌던 위치 범위를 확인할 수 있습니다.

  • dx -g @$curframe.TTD.VariableHistory().Variables 는 지역 변수 이름 목록을 표시합니다.
  • dx -g @$curframe.TTD.VariableHistory().Variables[n].Values 는 지역 변수 #n 대한 기록을 표시합니다.

TTD Replay API는 실험적 SDK에서도 사용할 수 있습니다. 이 API는 디버거가 TTD와 상호 작용하는 데 사용하는 것과 동일한 API이며, .Calls()와 .Memory() 함수가 데이터를 효율적으로 수집할 수 있도록 지원합니다. 자세한 내용은 https://aka.ms/ttdsdk를 참조하세요.

수정됨

  • 사용 중단 ErrorReporting::PrintError 으로 인한 크래시 수정(1.11.553)

1.11.532

이 릴리스는 기록 견고성을 개선하는 유지 관리 릴리스입니다. 이 TTD 릴리스는 Windbg의 2025년 6월 릴리스와 일치합니다. 한 가지 새로운 기능은 이제 Position 데이터 모델 개체가 추적에 백분율을 보고하는 것입니다.

변경

  • 기타 인프라 유지 관리.
  • C++ volatile의 ISO 표준 구현을 사용합니다. (1.11.518)
  • 위치 데이터 모델 프로젝션에 백분율을 추가합니다. (1.11.514)

수정됨

  • 디코딩된 명령의 TTD 처리의 견고성을 높입니다. (1.11.530)
  • 에뮬레이터에서 XSAVE 사용을 제거하고 내부 레지스터 전송을 최적화합니다. (1.11.509)

1.11.506

이 릴리스는 2025년 4월에 발표되는 WinDbg 릴리스와 일치하는 경미한 업데이트입니다.

변경

  • 데이터 모델(예: 모듈 목록)에서 TTD 위치를 클릭하면 추적에서 해당 위치로 이동합니다. (1.11.492)

    참고: 명령 창은 다음 단계 또는 실행 명령이 실행될 때까지 업데이트된 TTD 위치를 표시하지 않습니다.

수정됨

  • PID에 연결할 때 프로세스 이름을 .out 파일에 추가하여 문제 해결을 지원합니다. (1.11.486)

1.11.481

추적을 탐색할 수 있는 보다 강력한 방법을 제공하기 위해 !tt 명령을 개선했습니다.

  • 소수 비율은 검색 공간의 범위를 좁히는 데 사용할 수 있습니다(!tt 23.65).
  • 레지스터가 값을 변경할 때 이전/다음 시간을 찾습니다(!tt br ebx).
  • 메모리 범위에 액세스할 때 이전/다음 시간을 찾습니다(!tt ba- [addr] [range])
  • 실행이 다른 모듈로 이동하는 이전/다음을 찾아보십시오 (!tt bm).
  • 실행이 특정 모듈로 이동하는 이전/다음 시점을 찾습니다(!tt bm ntdll).

자세한 내용은 !tt(시간 이동)를 참조하세요.

몇 가지 주목할 만한 수정 사항:

  • "32비트 추적에서 @$cursession.TTD.Data.Heap()를 사용할 때 '오류: 64비트 값이 숫자로 변환 시 정밀도를 잃습니다' 메시지가 사라집니다."
  • 이제 명령줄에서 도움말 옵션 구문 분석(-?, -help)이 올바르게 검색됩니다.
  • dx @$cursession.TTD.Calls() 함수의 시작 부분과 일치하는 주소가 더 이상 필요하지 않습니다. 대신 주소는 가장 가까운 일치 함수의 시작 부분에 매핑됩니다.
  • TTD는 꼭짓점 명령에서 대상 OS 버전을 올바르게 보고합니다.
  • 호스티드 서비스 이름으로 "-monitor"를 사용하면 더 이상 관련 없는 호스팅 서비스를 기록하지 않습니다.

추가됨

  • TTD 추적에 변경 중단점 등록(1.11.431)

변경

  • 모니터 모드를 사용하여 이름으로 서비스 기록 수정(1.11.477)
  • 디버거에서 사용할 실제 대상 시스템의 OS 정보 캡처(1.11.473)
  • 에뮬레이터와 CONTEXT 간에 XMM 레지스터 전송 수정(1.11.469)
  • 함수 내의 주소에 대한 호출 쿼리 허용(1.11.459)
  • !tt 명령줄에서 주소/크기로 기호 지원(1.11.454)
  • 일관성을 개선하고 TTD 탐색 명령의 기능을 확장합니다(1.11.453).
  • 손상된 데이터에 대한 모듈 DB 일관성 향상(1.11.430)

수정됨

  • PID에 연결할 때 출력에 프로세스 이름 추가(1.11.486)
  • TTD.Data.Heap()는 경우에 따라 "오류: 64비트 값이 숫자로 변환될 때 정밀도를 잃음"을 나타냅니다 (1.11.471)
  • 섀도 스택을 사용하도록 설정된 프로세스 기록의 안정성 향상(1.11.466)
  • !tt bm 및 데이터 모델을 통해 모듈 탐색 추가(1.11.462)
  • 명령줄 구문 분석과 관련된 몇 가지 문제를 해결합니다. (1.11.444)
  • lodsd 수정, 주소에서 더블워드를 로드하고 rax의 상위 부분을 0으로 설정 (1.11.434)
  • 일부 libfuzzer 버그 수정(1.11.433)

1.11.429

이 TTD 업데이트에는 안정성을 개선하기 위한 몇 가지 내부 변경 내용과 함께 몇 가지 버그 수정이 포함되어 있습니다.

참고: 1.11.410은 Intel/AMD LODSD 명령의 에뮬레이션에 회귀를 도입했습니다. 이 회귀에 대한 수정 사항은 다음 릴리스에서 제공됩니다.

수정 사항:

  • 패킷 읽기 견고성과 기타 잡다한 변경 사항을 개선하여 안정성을 향상시킵니다.
  • AVX VBROADCAST[I/F]128 명령을 에뮬레이트하는 회귀를 수정합니다.
  • 최신 Windows 빌드의 ARM64에서 예외 레코드 액세스를 수정합니다.

1.11.410

접근성 향상: 텍스트 크기 변경에 따라 프로그램 진행 UI가 제대로 조정됩니다.

@$cursession.TTD.Calls() 이제 디버거의 명령은 많은 수의 함수와 일치하는 와일드카드를 지원합니다. 이제 많은 수의 함수(@$cursession.TTD.Calls("kernel32!*"))를 쿼리할 수 있습니다.

자동화: 새 -onMonitorReadyEvent 명령줄 옵션은 기록 모니터(-monitor 스위치)가 새 프로세스를 기록할 준비가 된 시기를 나타냅니다.

수정 사항:

  • 레코더를 초기화하는 동안 일부 레이스 컨디션을 수정하십시오.
  • 중단점이 올바르게 작동하도록 시스템 호출 기록 방식을 수정합니다.
  • 모듈 선택적 기록과 관련된 여러 문제를 해결합니다.

ARM64 수정 사항:

  • 일반 ARM64v8.0 수준 CPU에서 TTD 기록을 방지하는 버그가 수정되었습니다.
  • ARM64에서 x86 또는 x64 프로세스의 추적을 사용하려고 할 때 메시징이 향상되었습니다.

AMD/Intel 수정(Google에서 보고한 일부 문제 포함):

  • LODS의 잘못된 에뮬레이션 수정: 사용되지 않는 RAX 비트를 0으로 유지하는 대신 이제 올바르게 보존됩니다.
  • x86/x64 프로세스에서 "pop ax" 명령의 에뮬레이션이 수정되었습니다. 전체 레지스터의 위쪽 비트를 잘못 0으로 표시했습니다(예: "pop ax"가 rax의 상위 비트를 지웠다).
  • XGETBV 명령의 직접 에뮬레이션(더 빠름)
  • 모든 AVX512 SIMD 이동의 직접 에뮬레이션(더 빠름)

1.11.316

중단 없는 긴 데이터 사용 명령 시퀀스로 프로그램을 기록할 때 가끔 충돌이 발생하는 회귀를 수정했습니다.

ARM64 수정 사항:

  • 이제 PAC 기능을 사용하도록 설정된 ARM64 프로세스의 녹음이 지원됩니다.
  • 캐리 및 오버플로 플래그를 지우지 못하는 ANDS 및 TST 지침을 수정했습니다.

AMD/Intel 수정 사항:

  • TTD가 "xchg r8,rax" 및 "xchg r8w,ax"를 NOP로 잘못 에뮬레이트하는 버그가 수정되었습니다.

1.11.304

이제 TTD는 라이브 기록 프로세스 내에서 레코더를 제어하기 위해 공개적으로 API를 구현하고 게시합니다. 설명서 및 샘플은 GitHub에서 찾을 수 있습니다.

이제 TTD는 새 -recordMode 스위치를 사용하여 녹음이 꺼진 상태에서 삽입할 수 있습니다. 기본적으로 TTD는 -recordMode Automatic를 사용하여 모든 스레드를 기록합니다. 지정된 경우 -recordMode Manual TTD는 대상 프로세스에 삽입되지만 API 호출을 통해 수행하라는 요청이 있기 전까지는 아무 것도 기록하지 않습니다.

이제 스위치를 사용하여 -module 특정 모듈 집합으로 기록을 제한할 수 있습니다. 일부 시나리오에서는 이 제한으로 인해 훨씬 더 빠른 기록 및 더 작은 추적 파일이 발생할 수 있습니다. 하나 이상의 -module 스위치를 지정할 수 있습니다.

이제 일치하는 레코드 및 재생 구성 요소가 배포에 포함됩니다. 디버거와 명령줄 레코더 간의 비호환성 또는 재생 버그가 있는 경우 새 디버거가 릴리스될 때까지 재생 구성 요소를 디버거 설치에 복사하여 해결 방법으로 복사할 수 있습니다.

설치된 파일 위치는 다음 명령을 실행하여 PowerShell에서 찾을 수 있습니다.

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

추가됨

  • 자동 기록 없이 삽입을 사용하도록 -recordmode 스위치 추가(1.11.296)
  • -module 스위치를 추가하고 SR 구성을 만드는 데 사용(1.11.291)
  • In-Process API에서 데이터 모델로 기록된 프로젝트 사용자 지정 데이터(1.11.286)
  • 새 TTDLiveRecorder.dll 추가하고 TTDRecordCPU.dll 함께 연결합니다(1.11.283).
  • MSIX에 재생 구성 요소 추가 및 SDK 조회 수정(1.11.265)

변경

없음

수정됨

알려진 문제

  • ARM64에서 컴파일러는 여러 고빈도 함수를 테일 콜링하지 못하고 있어, 극단적인 경우 레코더가 스택 공간 부족으로 인해 크래시가 발생할 수 있습니다.

1.11.261

이 릴리스의 주목할 만한 변경 사항은 다음과 같습니다.

  • [ARM64] 대상 레지스터가 SXTL원본으로 사용되는 경우 , SQXTN2, SQXTUN2UQXTN2XTN2TRN1 지침의 동작을 수정했습니다.
  • [ARM64] 디버거에서 하위 64비트가 높은 64비트로 중복된 SIMD 레지스터를 표시하는 문제를 해결했습니다.
  • [AMD64] AMD의 Zen4 프로세서에 대한 AVX512 에뮬레이션 수정(레지스터가 손상됨).

변경

  • 에뮬레이터에 대한 새 버전 관리 시스템을 구현합니다. (1.11.260)

수정됨

  • 대상 레지스터가 원본으로도 사용되는 잘못된 ARM64 지침을 수정합니다. (1.11.261)
  • 에뮬레이터에 대한 직접 반환에 대한 Zen4 해결 방법을 수정합니다. (1.11.222)

1.11.202

이 릴리스는 스위치를 통해 -monitor 서비스 또는 모니터링 프로세스 시작을 기록하는 동안 발생하는 여러 문제를 해결합니다. 또한 제품에서 ARM32 녹음/녹화 지원을 제거합니다.

변경

  • TTD 구성 요소를 UCRT에 DLL로 연결하여 이진 크기를 줄입니다. (1.11.191)

수정됨

  • 서비스 기록을 수정합니다. (1.11.193)
  • -monitor를 사용할 때 몇 가지 문제를 해결합니다. (1.11.189)
  • x64에서 대체를 실행할 때 비휘발성 값을 유지하는 함수의 스택 프레임 수정(1.11.188)
  • TTD용 출력 버퍼링을 다시 활성화함 (1.11.187)
  • ProcessMonitorServer에서 GPO 핸들 처리 수정(1.11.179)

제거됨

  • 리포지토리에서 ARM32 녹음/녹화 코드 제거(1.11.198)

1.11.173

이 릴리스는 .out 파일에서 추출하여 콘솔에 인쇄하여 특정 오류 메시지의 가시성을 높입니다. 또한 추적 재생 중에 드문 충돌을 수정합니다.

변경

  • .out 파일에서 오류 메시지 추출 및 인쇄(1.11.173)

수정됨

  • 별도의 프로세스에서 .out 파일을 읽는 동안 파일 충돌을 해결합니다. (1.11.171)
  • 추적 재생 중에 드물게 발생하는 충돌을 수정합니다. (1.11.166)

1.11.163

이 릴리스에서는 x64 컴퓨터에서 x86 프로세스를 기록하기 위한 지원을 추가합니다.

변경

  • x64 TTD 설치로 x86 기록 문제 수정(1.11.163)

수정됨

  • EULA 정리(1.11.161)

1.11.159

이 릴리스는 명령줄 레코더의 첫 번째 공개 릴리스입니다. 명령줄 레코더의 공개 릴리스를 사용하도록 설정하는 데 필요한 몇 가지 변경 내용과 함께 이 릴리스에는 CPU 에뮬레이터에 대한 몇 가지 수정 사항을 포함하여 여러 버그 수정도 포함되어 있습니다.

-timestampFileName 스위치를 사용하면 타임스탬프 기반 .run 파일을 생성할 수 있습니다. 이 스위치는 동일한 프로세스의 여러 인스턴스를 기록하고 시작 시간을 최소화하려는 경우에 유용합니다.

변경

  • 사용되는 추적기를 기반으로 런타임 시 기본 삽입 모드 선택(1.11.156)
  • 타임스탬프 기반 .run 파일 생성을 사용하도록 스위치 추가(1.11.155)
  • EULA 및 -accepteula TTD에 추가(1.11.154)
  • MSIX에 ProcLaunchMon.sys 추가(1.11.153)
  • 아치별 MSIX 및 MSIXBUNDLE 만들기(1.11.152)
  • Clang로 빌드된 TTD를 테스트할 때 발생하는 여러 문제를 해결합니다. (1.11.146)
  • TTDAnalyze에 대한 Clang 수정(1.11.144)

수정됨

  • appinstaller/공개 릴리스에 대한 피드백 검토(1.11.159)
  • RC 피드백 (1.11.157)
  • 싱크를 가리키도록 RegisterInfo를 초기화하여 제로 레지스터를 손상시키지 마세요. (1.11.149)
  • TST 명령을 즉시 수정하고 단위 테스트를 개선하여 이를 처리하는 등의 작업을 수행합니다. (1.11.148)
  • 보호된 프로세스 결정을 통합하고 보호된 프로세스 사용을 사용하지 않도록 설정(1.11.147)

1.11.138

변경

  • 레코더 MSIX 만들기(1.11.138)
  • Clang가 TTD를 빌드할 수 있도록 모든 문제를 해결합니다. (1.11.137)
  • 시작 시 프로세스를 기록하는 방법으로 -monitor X 도입(1.11.116)

수정됨

  • "CMP ZR" ARM64 에뮬레이션 수정(1.11.128)
  • AMD의 Zen4 프로세서에서 AVX512 에뮬레이션 수정(1.11.127)
  • TTD가 특정 CPU에 대한 파일을 찾는 데 사용하는 메커니즘 수정(1.11.121)
  • x86 TTD 회귀 수정(TTDRecordCPU.dll 로드 실패) (1.11.110)
  • X28을 휴지통하지 않도록 ARM64의 네이티브 경로로의 반환 수정(1.11.109)

참고 항목

시간 이동 디버깅 – 개요

시간 이동 디버깅 – 명령줄 레코더