다음을 통해 공유


시간 이동 디버깅 - 개요

Time travel debugging logo featuring a clock.

시간 이동 디버깅이란?

시간 이동 디버깅은 실행 시 프로세스의 추적을 캡처한 다음 나중에 앞뒤로 재생할 수 있는 도구입니다. TTD(시간 이동 디버깅)를 사용하면 버그를 찾을 때까지 문제를 재현하는 대신 디버거 세션을 "되감기"하여 문제를 보다 쉽게 디버그할 수 있습니다.

TTD를 사용하면 버그로 이어지는 조건을 더 잘 이해하고 여러 번 재생하여 문제를 해결하는 가장 좋은 방법을 배울 수 있습니다.

TTD는 크래시 덤프 파일에 비해 장점이 있을 수 있으며, 최종 실패로 이어진 상태 및 실행 경로가 누락되는 경우가 많습니다.

문제를 직접 파악할 수 없는 경우 동료와 추적을 공유할 수 있으며 사용자가 보고 있는 내용을 정확하게 확인할 수 있습니다. 이렇게 하면 기록된 지침이 동일하지만 주소 위치와 코드 실행은 서로 다른 PC에서 다르므로 라이브 디버깅보다 공동 작업을 더 쉽게 수행할 수 있습니다. 또한 특정 시점을 공유하여 동료가 시작할 위치를 파악하는 데 도움을 줄 수 있습니다.

TTD는 효율적이며 추적 파일에서 코드 실행을 캡처할 때 가능한 한 적은 오버헤드를 추가하기 위해 작동합니다.

TTD에는 LINQ를 사용하여 추적을 쿼리할 수 있는 디버거 데이터 모델 개체 집합이 포함되어 있습니다. 예를 들어 TTD 개체를 사용하여 특정 코드 모듈이 로드된 시기를 찾거나 모든 예외를 찾을 수 있습니다.

Screenshot of WinDbg with Time Travel Debugging command and three timelines.

요구 사항

Time Travel 디버깅은 WinDbg통합되어 원활한 녹음 및 재생 환경을 제공합니다.

TTD를 사용하려면 디버거를 관리자 권한으로 실행해야 합니다. 관리자 권한이 있는 계정을 사용하여 WinDbg를 설치하고 디버거에서 기록할 때 해당 계정을 사용합니다. 상승된 디버거를 실행하려면 시작 메뉴 WinDbg 아이콘을 선택하고 길게 누르거나 마우스 오른쪽 단추로 클릭한 다음 관리istrator로 자세히 > 실행을 선택합니다.

기록을 포함하는 생성된 추적 파일에는 파일 경로, 레지스트리, 메모리 또는 파일 콘텐츠를 포함하지만 반드시 제한되지는 않는 개인 식별 또는 보안 관련 정보가 포함될 수 있습니다. 정확한 정보는 기록된 동안 대상 프로세스 활동에 따라 달라집니다. 녹음/녹화 파일을 다른 사용자와 공유할 때는 이 사실을 알고 있어야 합니다.

TTD.exe 명령줄 기록 유틸리티

WinDbg UI에서 추적을 기록하는 것 외에도 추적을 기록하는 데 사용할 수 있는 TTD.exe 명령줄 유틸리티가 있습니다.

디버거를 설치하지 않고 PC에서 기록, 고급 기록 시나리오, 테스트 자동화 등 TTD 명령줄 레코더만 필요한 시나리오가 있을 수 있습니다. 이러한 시나리오에서는 URL을 통해 TTD 명령줄 레코더만 설치할 수 있습니다. 자세한 내용은 Time Travel 디버깅 - TTD.exe 명령줄 유틸리티를 참조하세요.

디버깅 도구 비교

이 표에는 사용 가능한 다양한 디버깅 솔루션의 장단점이 요약되어 있습니다.

접근 방식 장점 단점
라이브 디버깅 대화형 환경은 실행 흐름을 보고, 익숙한 설정에서 익숙한 도구인 대상 상태를 변경할 수 있습니다. 사용자 환경을 방해하고, 문제를 반복적으로 재현하기 위한 노력이 필요할 수 있으며, 항상 프로덕션 시스템에서 옵션이 아닌 보안에 영향을 미칠 수 있습니다. 재현이 어려운 경우 실패 지점에서 다시 작업하여 원인을 파악합니다.
덤프 트리거를 기반으로 선행 코딩, 낮은 침입성이 없습니다. 연속 스냅샷 또는 라이브 덤프는 간단한 "시간에 따른" 보기를 제공합니다. 사용하지 않는 경우 오버헤드는 기본적으로 0입니다.
원격 분석 및 로그 간단한, 종종 비즈니스 시나리오 / 사용자 작업에 연결, 기계 학습 친화적 인. 예기치 않은 코드 경로(원격 분석 없음)에서 문제가 발생합니다. 정적으로 코드로 컴파일된 데이터 깊이가 부족합니다.
TTD(시간 이동 디버깅) 복잡한 버그, 선행 코딩 없음, 오프라인 반복 가능한 디버깅, 분석 친화적, 모든 것을 캡처합니다. 기록 시간에 큰 오버헤드. 필요한 더 많은 데이터를 수집할 수 있습니다. 데이터 파일은 커질 수 있습니다.

비디오 교육

TTD에 대한 자세한 내용은 다음 비디오를 참조하세요.

조각 모음 도구 185 - Ivette와 JamesP는 TTD의 기본 사항을 검토하고 WinDbg의 일부 기능을 데모합니다.

조각 모음 도구 186 - Jordi 및 JCAB 데모 WinDbg에서 TTD의 더 훌륭한 기능

CppCon (YouTube) - 조르디, 켄, 제임스M은 CppCon 2017에서 WinDbg에서 TTD를 발표했습니다.

추적 파일 기본 사항

추적 파일 크기

추적 파일이 커질 수 있으며 TTD 사용자는 사용 가능한 공간이 충분한지 확인해야 합니다. 몇 분 동안 프로그램을 기록하는 경우 추적 파일은 빠르게 몇 기가바이트로 증가할 수 있습니다. TTD는 복잡한 장기 실행 시나리오를 허용하도록 추적 파일의 최대 크기를 설정하지 않습니다. 문제를 신속하게 다시 만들면 추적 파일 크기를 가능한 한 작게 유지합니다.

추적 및 인덱스 파일

추적 파일(.run)은 기록 중에 코드 실행을 저장합니다.

기록이 중지되면 추적 정보에 대한 액세스를 최적화하기 위해 인덱스 파일(.idx)이 만들어집니다. 또한 인덱스 파일은 WinDbg에서 추적 파일을 열 때 자동으로 만들어집니다.

인덱스 파일은 일반적으로 추적 파일보다 두 배 큰 큰 파일일 수도 있습니다.

명령을 사용하여 !tt.index 추적 파일에서 인덱스 파일을 다시 만들 수 있습니다.

0:000> !tt.index
Successfully created the index in 10ms.

기록 오류 및 기타 기록 출력은 WinDbg 로그 파일에 기록됩니다.

모든 출력 파일은 사용자가 구성한 위치에 저장됩니다. 기본 위치는 사용자 문서 폴더에 있습니다. 예를 들어 User1의 경우 TTD 파일은 여기에 저장됩니다.

C:\Users\User1\Documents

추적 파일 작업에 대한 자세한 내용은 시간 이동 디버깅 - 추적 파일 작업을 참조하세요.

알아야 할 사항

바이러스 백신 비호환성

TTD가 프로세스에 연결하여 기록하기 때문에 비호환성이 발생할 수 있습니다. 일반적으로 시스템 메모리 호출을 추적하고 숨기려는 바이러스 백신 또는 기타 시스템 소프트웨어와 관련된 문제가 발생합니다. 권한 메시지 부족과 같은 기록 문제가 발생하는 경우 바이러스 백신 소프트웨어를 일시적으로 사용하지 않도록 설정해 보세요.

메모리 액세스를 차단하려는 다른 유틸리티도 문제가 될 수 있습니다(예: Microsoft 고급 완화 환경 도구 키트).

TTD와 충돌하는 환경의 또 다른 예는 전자 애플리케이션 프레임워크입니다. 이 경우 추적이 기록될 수 있지만 기록 중인 프로세스의 교착 상태 또는 충돌도 가능합니다.

사용자 모드만

TTD는 현재 사용자 모드 작업만 지원하므로 커널 모드 프로세스를 추적할 수 없습니다.

읽기 전용 재생

시간을 거슬러 이동할 수 있지만 기록을 변경할 수는 없습니다. 읽기 메모리 명령을 사용할 수 있지만 메모리를 수정하거나 쓰는 명령은 사용할 수 없습니다.

시스템 보호 프로세스

PPL(Protected Process Light) 프로세스와 같은 일부 Windows 시스템 보호 프로세스는 보호되므로 TTD는 코드 실행을 기록할 수 있도록 보호된 프로세스에 자신을 삽입할 수 없습니다.

기록의 성능 영향

애플리케이션 또는 프로세스를 기록하면 PC의 성능에 영향을 줍니다. 실제 성능 오버헤드는 기록 중에 실행되는 코드의 양과 유형에 따라 달라집니다. 일반적인 기록 시나리오에서 약 10x-20배 성능이 저하되는 것을 예상할 수 있습니다. 경우에 따라 눈에 띄는 속도가 느려지지 않지만 리소스 집약적인 작업(예: 파일 열기 대화 상자)의 경우 기록의 영향을 확인할 수 있습니다.

추적 파일 오류

추적 파일 오류가 발생할 수 있는 경우도 있습니다. 자세한 내용은 시간 이동 디버깅 - 문제 해결을 참조 하세요.

시간 이동 디버깅의 고급 기능

가장 주목할 만한 TTD 고급 기능은 다음과 같습니다.

타임라인

타임라인은 실행 중에 발생하는 이벤트의 시각적 표현입니다. 이러한 이벤트는 중단점, 메모리 읽기/쓰기, 함수 호출 및 반환 및 예외의 위치일 수 있습니다. 타임라인 대한 자세한 내용은 WinDbg - 타임라인을 참조하세요.

디버거 데이터 모델 지원

  • 기본 제공 데이터 모델 지원 - TTD에는 데이터 모델 지원이 포함됩니다. LINQ 쿼리를 사용하여 애플리케이션 오류를 분석하는 것은 강력한 도구일 수 있습니다. WinDbg의 데이터 모델 창을 사용하여 확장 가능하고 검색 가능한 버전의 'dx' 및 'dx -g'를 사용하여 NatVis, JavaScript 및 LINQ 쿼리를 사용하여 테이블을 만들 수 있습니다.

디버거 데이터 모델에 대한 일반적인 내용은 WinDbg - 데이터 모델을 참조하세요. TTD 디버거 개체 모델 작업에 대한 자세한 내용은 시간 이동 디버깅 - 시간 이동 디버깅 개체 소개를 참조 하세요.

스크립팅 지원

  • 스크립팅 자동화 - JavaScript 및 NatVis에 대한 스크립팅 지원을 통해 문제 조사를 자동화할 수 있습니다. 자세한 내용은 시간 이동 디버깅 - JavaScript 자동화를 참조 하세요.

JavaScript 및 NatVis 작업에 대한 일반적인 내용은 WinDbg - 스크립팅을 참조 하세요.

TTD.exe 명령줄 유틸리티

추적을 기록하는 TTD.exe 명령줄 유틸리티를 사용할 수 있습니다. 자세한 내용은 Time Travel 디버깅 - TTD.exe 명령줄 유틸리티를 참조하세요.

관리 코드 TTD 지원

64비트 모드에서 실행되는 SOS 디버깅 확장(sos.dll)을 사용하여 WinDbg에서 TTD를 사용하여 관리 코드를 디버그할 수 있습니다. 자세한 내용은 Windows 디버거를 사용하여 관리 코드 디버깅을 참조 하세요.

TTD 시작

추적 파일 작업 및 문제 해결에 대한 정보는 물론 추적 파일을 기록하고 재생하려면 다음 항목을 검토하세요.

이 항목에서는 시간 이동 디버깅의 추가 고급 기능에 대해 설명합니다.