학습
모듈
Visual Studio 디버거를 사용하여 대화형으로 .NET 앱 디버그 - Training
Visual Studio를 통해 .NET 앱을 효율적으로 디버그하여 버그를 빠르게 수정하는 방법을 알아봅니다. Visual Studio 내에서 대화형 디버거를 사용하여 C# 애플리케이션을 분석하고 수정합니다.
이 문서에서는 사용자 모드 덤프 파일의 개요와 이를 사용하여 버그 및 크래시를 해결하는 방법을 알아보세요.
덤프 파일 분석에 대한 자세한 내용은 사용자 모드 덤프 파일 분석을 참조 하세요.
여러 유형의 사용자 모드 크래시 덤프 파일을 사용할 수 있습니다. 다양한 유형의 덤프 파일은 다음 두 가지 범주로 나뉩니다.
덤프 파일을 분석하여 상당한 양의 정보를 얻을 수 있습니다. 그러나 덤프 파일은 디버거를 사용하여 크래시 디버깅에서 얻는 정보의 양을 제공할 수 없습니다.
전체 사용자 모드 덤프는 기본 사용자 모드 덤프 파일입니다. 전체 사용자 모드 덤프 파일에는 다음이 포함됩니다.
전체 사용자 모드 덤프 파일을 미니덤프로 축소할 수 있습니다. 전체 사용자 모드 덤프 파일을 축소하려면 먼저 디버거에 덤프 파일을 로드합니다. 그런 다음 .dump(덤프 파일 만들기) 명령을 사용하여 새 덤프 파일을 미니덤프 형식으로 저장합니다.
이름에도 불구하고 가장 큰 미니덤프 파일에는 전체 사용자 모드 덤프 파일보다 더 많은 정보가 포함되어 있습니다. 예를 들어 .dump /mf
명령과 .dump /ma
명령은 명령보다 .dump /f
더 크고 완전한 파일을 만듭니다.
사용자 모드 .dump /m
에서는 [MiniOptions]가 가장 적합한 경우가 많습니다. 이 스위치를 사용하여 만든 덤프 파일의 크기는 매우 작음에서 매우 큰 크기로 다를 수 있습니다. 올바른 MiniOptions 스위치를 지정하여 포함된 정보를 정확하게 제어할 수 있습니다.
미니덤프 파일의 크기와 내용은 덤프되는 프로그램 및 덤프를 수행하는 애플리케이션 및 선택한 옵션에 따라 달라집니다. 경우에 따라 미니덤프 파일은 적당히 크며 전체 메모리 및 핸들 테이블을 포함합니다. 다른 경우에는 미니덤프 파일이 훨씬 작습니다. 예를 들어 미니덤프 파일에는 단일 스레드에 대한 정보만 포함되거나 스택에서 참조되는 모듈에 대한 정보만 포함될 수 있습니다.
미니덤프라는 용어는 가장 큰 미니덤프 파일에 전체 사용자 모드 덤프 파일보다 더 많은 정보가 포함되어 있기 때문에 오해의 소지가 있습니다. 예를 들어 . .dump /mf
.dump /ma
.dump /f
따라서 모든 사용자 모드 덤프 파일을 만드는 대신 .dump /f
[MiniOptions]를 사용하는 .dump /m
것이 좋습니다.
디버거를 사용하여 미니덤프 파일을 만드는 경우 포함할 정보를 선택할 수 있습니다. 이 명령에는 .dump /m
대상 프로세스, 스레드 정보 및 스택 정보를 구성하는 로드된 모듈에 대한 기본 정보가 포함됩니다. 다음 표에 설명된 스위치 옵션을 사용하여 기본 명령을 수정할 수 있습니다.
.dump 선택 |
덤프 파일에 미치는 영향 |
---|---|
/ma |
모든 선택적 추가를 사용하여 미니덤프를 만듭니다. 옵션은 /ma .에 해당합니다 /mfFhut . 전체 메모리 데이터, 처리 데이터, 언로드된 모듈 정보, 기본 메모리 정보 및 스레드 시간 정보를 미니덤프에 추가합니다. |
/mf |
미니덤프에 전체 메모리 데이터를 추가합니다. 대상 애플리케이션이 소유한 액세스 가능한 커밋된 모든 페이지가 포함됩니다. |
/mF |
미니덤프에 모든 기본 메모리 정보를 추가합니다. 이 스위치는 유효한 메모리에 대한 정보뿐만 아니라 모든 기본 메모리 정보를 포함하는 스트림을 미니덤프에 추가합니다. 디버거는 이 정보를 사용하여 미니덤프를 디버그할 때 프로세스의 전체 가상 메모리 레이아웃을 다시 구성합니다. |
/mh |
대상 애플리케이션과 연결된 핸들에 대한 데이터를 미니덤프에 추가합니다. |
/mu |
언로드된 모듈 정보를 미니덤프에 추가합니다. 이 옵션은 Windows Server 2003 이상 버전의 Windows에서만 사용할 수 있습니다. |
/mt |
미니덤프에 스레드 정보를 더 추가합니다. 스레드 정보에는 미니덤프를 디버그할 때 .ttime(스레드 시간 표시)을 사용하여 표시할 수 있는 스레드 시간이 포함됩니다. |
/mi |
미니덤프에 보조 메모리를 추가합니다. 보조 메모리 는 스택 또는 백업 저장소의 포인터에 의해 참조되는 메모리와 이 주소를 둘러싼 작은 영역입니다. |
/mp |
프로세스 환경 블록 및 스레드 환경 블록 데이터를 미니덤프에 추가합니다. 이 정보는 애플리케이션의 프로세스 및 스레드와 관련된 Windows 시스템 정보에 액세스해야 하는 경우에 유용할 수 있습니다. |
/mw |
커밋된 모든 읽기-쓰기 프라이빗 페이지를 미니덤프에 추가합니다. |
/md |
실행 이미지 내의 모든 읽기-쓰기 데이터 세그먼트를 미니덤프에 추가합니다. |
/mc |
이미지 내에 코드 섹션을 추가합니다. |
/mr |
스택의 미니덤프 부분에서 삭제하고 스택 추적을 다시 만드는 데 사용되지 않는 메모리를 저장합니다. 지역 변수 및 기타 데이터 형식 값도 삭제됩니다. 이 옵션은 미니덤프를 더 작게 만들지 않지만(사용되지 않는 메모리 섹션이 0) 다른 애플리케이션의 개인 정보를 보호하려는 경우 유용합니다. |
/mR |
미니덤프에서 전체 모듈 경로를 삭제합니다. 모듈 이름 만 포함됩니다. 이 옵션은 사용자의 디렉터리 구조의 개인 정보를 보호하려는 경우에 유용합니다. |
이러한 스위치 옵션을 결합할 수 있습니다. 예를 들어 명령을 .dump /mfiu
사용하여 언로드된 메모리와 보조 메모리를 포함하는 적당히 큰 미니덤프를 만듭니다. 명령을 .dump /mrR
사용하여 사용자의 정보 중 일부를 제거하는 미니덤프를 만듭니다. 전체 구문 세부 정보는 .dump(덤프 파일 만들기)를 참조하세요.
사용자 모드 덤프 파일을 만드는 데 사용할 수 있는 여러 가지 도구가 있습니다.
ProcDump는 애플리케이션에서 CPU 스파이크를 모니터링하고 급증 시 크래시 덤프를 생성하는 데 사용할 수 있는 명령줄 유틸리티입니다. 관리자 또는 개발자는 크래시 덤프 파일을 사용하여 급증의 원인을 확인할 수 있습니다. ProcDump에는 중단된 창에 대한 모니터링(Windows 및 작업 관리자에서 사용하는 창 중단과 동일한 정의 사용) 및 처리되지 않은 예외도 포함됩니다. ProcDump를 사용하여 시스템 성능 카운터의 값을 기반으로 덤프를 생성할 수 있습니다. ProcDump는 다른 스크립트에 포함할 수 있는 일반 프로세스 덤프 유틸리티로도 사용할 수 있습니다.
Sysinternals ProcDump 유틸리티를 사용하여 사용자 모드 덤프 파일을 만드는 방법에 대한 자세한 내용은 ProcDump를 참조하세요.
CDB(콘솔 디버거) 및 WinDbg(Windows 디버거)는 Windows 소프트웨어 개발 키트 및 Windows 드라이버 키트에 포함된 디버깅 도구입니다. WinDbg Windows 디버거 다운로드 및 설치의 설치 옵션을 참조하세요.
CDB 또는 WinDbg를 사용하여 여러 가지 방법으로 사용자 모드 덤프 파일을 만들 수 있습니다.
도구에 대한 자세한 내용은 CDB를 사용하여 Windows 디버깅 시작 및 디버그를 참조하세요.
애플리케이션 오류가 발생하면 Windows는 사후 배포 디버깅 설정에 따라 여러 가지 방법 중 하나로 응답할 수 있습니다. 이러한 설정이 디버깅 도구에 덤프 파일을 만들도록 지시하는 경우 사용자 모드 메모리 덤프 파일이 만들어집니다. 자세한 내용은 사후 관리 디버깅 사용을 참조 하세요.
CDB 또는 WinDbg가 사용자 모드 애플리케이션을 디버깅하는 경우 .dump(덤프 파일 만들기) 명령을 사용하여 덤프 파일을 만들 수도 있습니다.
이 명령은 대상 애플리케이션을 종료하지 않습니다. 특정 명령 옵션을 선택하여 원하는 정보의 양을 정확하게 포함하는 미니덤프 파일을 만들 수 있습니다.
CDB 또는 WinDbg를 사용하여 덤프 파일을 축소할 수 있습니다. 덤프 파일을 축소하려면 기존 덤프 파일 디버깅을 시작합니다. 그런 다음, 명령을 사용하여 .dump
더 작은 크기의 덤프 파일을 만듭니다.
사용자 모드 애플리케이션을 디버그하는 또 다른 옵션은 TTD(Time Travel Debugging)입니다. TTD는 실행되는 동안 프로세스를 기록하는 데 사용할 수 있는 도구입니다. 디버거 세션의 기록을 재생하여 버그를 찾을 수 있습니다. 기록의 다른 부분으로 쉽게 이동하여 버그로 이어진 조건과 문제를 해결하는 방법을 이해할 수 있습니다.
TTD는 크래시 덤프 파일에 비해 상당한 이점이 있으며, 종종 실패로 이어진 코드 실행이 누락되는 경우가 많습니다. 코드 실행에서 뒤로 이동하는 기능은 근본 원인을 확인하는 데 유용할 수 있습니다.
자세한 내용은 시간 이동 디버깅 개요를 참조 하세요.
학습
모듈
Visual Studio 디버거를 사용하여 대화형으로 .NET 앱 디버그 - Training
Visual Studio를 통해 .NET 앱을 효율적으로 디버그하여 버그를 빠르게 수정하는 방법을 알아봅니다. Visual Studio 내에서 대화형 디버거를 사용하여 C# 애플리케이션을 분석하고 수정합니다.