이 항목에서는 시간 이동 디버깅의 새로운 기능을 설명합니다.
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)
변경
없음
수정됨
-
일부 내부 도구에 사용되는 nlohmann JSON 직렬 변환기에서 버그 해결(1.11.281)
- 향후 릴리스에서 사용할 수 있게 될 라이브러리에 대한 수정 사항을 제공했습니다.
- 드문 CRT 버그를 방지하도록 문자열 맞춤 조정(1.11.279)
- VS 및 OS 코드베이스에 보고되고 수정되었습니다.
- 왓슨 충돌 보고서에서 몇 가지 작은 수정 (1.11.276)
- 경우에 따라 추적 파일 손상이 발생할 수 있는 회귀 수정(1.11.264)
알려진 문제
- ARM64에서 컴파일러는 여러 고빈도 함수를 테일 콜링하지 못하고 있어, 극단적인 경우 레코더가 스택 공간 부족으로 인해 크래시가 발생할 수 있습니다.
1.11.261
이 릴리스의 주목할 만한 변경 사항은 다음과 같습니다.
- [ARM64] 대상 레지스터가
SXTL원본으로 사용되는 경우 ,SQXTN2,SQXTUN2UQXTN2XTN2및TRN1지침의 동작을 수정했습니다. - [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 및
-accepteulaTTD에 추가(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)