시간 이동 디버깅 릴리스 정보
이 항목에서는 시간 이동 디버깅의 새로운 기능을 설명합니다.
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
스위치)가 새 프로세스를 기록할 준비가 된 시기를 나타냅니다.
수정 사항:
- 레코더를 초기화하는 동안 일부 경합 상태를 수정합니다.
- 중단점이 올바르게 작동할 수 있도록 syscall을 기록하는 방법을 수정합니다.
- 모듈 선택적 기록과 관련된 여러 문제를 해결합니다.
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)
Changed
없음
고정
- 일부 내부 도구에 사용되는 nlohmann JSON 직렬 변환기에서 버그 해결(1.11.281)
- 향후 릴리스에서 사용할 수 있게 될 라이브러리에 대한 수정 사항을 제공했습니다.
- 드문 CRT 버그를 방지하도록 문자열 맞춤 조정(1.11.279)
- VS 및 OS 코드베이스에 보고되고 수정되었습니다.
- 왓슨 충돌 보고서에서 몇 가지 작은 수정 (1.11.276)
- 경우에 따라 추적 파일 손상이 발생할 수 있는 회귀 수정(1.11.264)
알려진 문제
- ARM64에서 컴파일러는 많은 고주파 함수를 테일 호출하지 못하므로 극단적인 경우 레코더의 스택 공간 부족과 크래시가 발생할 수 있습니다.
1.11.261
이 릴리스의 주목할 만한 변경 사항은 다음과 같습니다.
- [ARM64] 대상 레지스터가
SXTL
원본으로 사용되는 경우 ,SQXTN2
,XTN2
SQXTUN2
UQXTN2
및TRN1
지침의 동작을 수정했습니다. - [ARM64] 디버거에서 하위 64비트가 높은 64비트로 중복된 SIMD 레지스터를 표시하는 문제를 해결했습니다.
- [AMD64] AMD의 Zen4 프로세서에 대한 AVX512 에뮬레이션 수정(레지스터가 손상됨).
Changed
- 에뮬레이터에 대한 새 버전 관리 시스템을 구현합니다. (1.11.260)
고정
- 대상 레지스터가 원본으로도 사용되는 잘못된 ARM64 지침을 수정합니다. (1.11.261)
- 에뮬레이터에 대한 직접 반환에 대한 Zen4 해결 방법을 수정합니다. (1.11.222)
1.11.202
이 릴리스는 스위치를 통해 -monitor
서비스 또는 모니터링 프로세스 시작을 기록하는 동안 발생하는 여러 문제를 해결합니다. 또한 제품에서 ARM32 녹음/녹화 지원을 제거합니다.
Changed
- 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 파일에서 추출하여 콘솔에 인쇄하여 특정 오류 메시지의 가시성을 높입니다. 또한 추적 재생 중에 드문 충돌을 수정합니다.
Changed
- .out 파일에서 오류 메시지 추출 및 인쇄(1.11.173)
고정
- 별도의 프로세스에서 .out 파일을 읽는 동안 파일 충돌을 해결합니다. (1.11.171)
- 추적 재생 중에 드물게 발생하는 충돌을 수정합니다. (1.11.166)
1.11.163
이 릴리스에서는 x64 컴퓨터에서 x86 프로세스를 기록하기 위한 지원을 추가합니다.
Changed
- x64 TTD 설치를 사용하여 x86 녹음/녹화 수정(1.11.163)
고정
- EULA 정리(1.11.161)
1.11.159
이 릴리스는 명령줄 레코더의 첫 번째 공개 릴리스입니다. 명령줄 레코더의 공개 릴리스를 사용하도록 설정하는 데 필요한 몇 가지 변경 내용과 함께 이 릴리스에는 CPU 에뮬레이터에 대한 몇 가지 수정 사항을 포함하여 여러 버그 수정이 포함되어 있습니다.
새 -timestampFileName
스위치를 사용하면 타임스탬프 기반 .run 파일을 생성할 수 있습니다. 이 기능은 동일한 프로세스의 여러 인스턴스를 기록하고 시작 시간을 최소화하려는 경우에 유용합니다.
Changed
- 사용되는 추적기를 기반으로 런타임 시 기본 삽입 모드 선택(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를 초기화하여 0 레지스터를 휴지통 처리하지 마세요. (1.11.149)
- TST 명령을 즉시 수정하고 단위 테스트를 개선하여 이를 처리하는 등의 작업을 수행합니다. (1.11.148)
- 보호된 프로세스 결정을 통합하고 보호된 프로세스 사용을 사용하지 않도록 설정(1.11.147)
1.11.138
Changed
- 레코더 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)