UMDH 사용 준비
UMDH(사용자 모드 덤프 힙)를 사용하여 프로세스에 대한 힙 할당을 캡처하기 전에 이 섹션에 설명된 구성 작업을 완료해야 합니다. 컴퓨터가 올바르게 구성되지 않은 경우 UMDH는 결과를 생성하지 않거나 결과가 불완전하거나 올바르지 않습니다.
사용자 모드 스택 추적 데이터베이스 만들기
UMDH를 사용하여 프로세스에 대한 힙 할당을 캡처하기 전에 스택 추적을 캡처하도록 Windows를 구성해야 합니다.
프로세스에 대해 스택 추적 캡처를 사용하도록 설정하려면 GFlags를 사용하여 프로세스에 대한 사용자 모드 스택 추적 데이터베이스 만들기 플래그를 설정합니다. 이 작업은 다음 방법 중 하나를 통해 수행할 수 있습니다.
GFlags 그래픽 인터페이스에서 이미지 파일 탭을 선택합니다. 파일 이름 확장명(예: Notepad.exe)을 포함하여 프로세스 이름을 입력합니다. TAB 키를 누르고 사용자 모드 스택 추적 데이터베이스 만들기를 선택한 다음 적용을 선택합니다.
또는 다음 GFlags 명령줄을 사용합니다. 여기서 ImageName 은 프로세스 이름(파일 이름 확장명 포함)입니다.
gflags /i ImageName +ust
기본적으로 Windows에서 수집하는 스택 추적 데이터의 양은 x86 프로세서에서 32MB, x64 프로세서에서는 64MB로 제한됩니다. 이 데이터베이스의 크기를 늘려야 하는 경우 GFlags 그래픽 인터페이스에서 이미지 파일 탭을 선택하고, 프로세스 이름을 입력하고, TAB 키를 누르고, 스택 백트레이스(Megs) 확인란을 선택하고, 연결된 텍스트 상자에 값(MB)을 입력한 다음 적용을 선택합니다.
이 데이터베이스는 제한된 Windows 리소스가 고갈될 수 있으므로 필요한 경우에만 증가합니다. 더 이상 더 큰 크기가 필요하지 않은 경우 이 설정을 원래 값으로 반환합니다.
이러한 설정은 프로그램의 모든 새 인스턴스에 영향을 줍니다. 현재 실행 중인 프로그램 인스턴스에는 영향을 주지 않습니다.
필요한 기호에 액세스
UMDH를 사용하기 전에 애플리케이션에 대한 적절한 기호에 액세스할 수 있어야 합니다. UMDH는 환경 변수 _NT_SYMBOL_PATH 지정된 기호 경로를 사용합니다. 이 변수를 애플리케이션의 기호가 포함된 경로와 동일하게 설정합니다.
Windows 기호에 대한 경로도 포함하는 경우 분석이 더 완료될 수 있습니다. 이 기호 경로의 구문은 디버거에서 사용하는 구문과 동일합니다. 자세한 내용은 기호 경로를 참조 하세요.
예를 들어 애플리케이션의 기호가 C:\MyApp\Symbols에 있고 Windows 기호 파일을 \\myshare\winsymbols에 설치한 경우 다음 명령을 사용하여 기호 경로를 설정합니다.
set _NT_SYMBOL_PATH=c:\myapp\symbols;\\myshare\winsymbols
또 다른 예로, 애플리케이션의 기호가 C:\MyApp\Symbols에 있고 Windows 기호에 공용 Microsoft 기호 저장소를 사용하려는 경우 C:\MyCache를 다운스트림 저장소로 사용하여 다음 명령을 사용하여 기호 경로를 설정합니다.
set _NT_SYMBOL_PATH=c:\myapp\symbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols
중요 UMDH 로그를 만드는 로깅 컴퓨터 와 UMDH 로그를 분석하는 분석 컴퓨터라는 두 대의 컴퓨터 가 있다고 가정합니다. 분석 컴퓨터의 기호 경로는 로그가 만들어졌을 때 로깅 컴퓨터에 로드된 Windows 버전의 기호를 가리킵니다. 분석 컴퓨터의 기호 경로를 기호 서버로 가리키지 마세요. 이 경우 UMDH는 분석 컴퓨터에서 실행 중인 Windows 버전에 대한 기호를 검색하고 UMDH는 의미 있는 결과를 표시하지 않습니다.
BSTR 캐싱 사용 안 함
Automation(이전의 OLE Automation)은 BSTR 문자열에서 사용하는 메모리를 캐시합니다. 이렇게 하면 UMDH가 메모리 할당의 소유자를 올바르게 결정하지 못할 수 있습니다. 이 문제를 방지하려면 BSTR 캐싱을 사용하지 않도록 설정해야 합니다.
BSTR 캐싱을 사용하지 않도록 설정하려면 OANOCACHE 환경 변수를 1과 동일하게 설정합니다. 할당을 추적할 애플리케이션을 시작하기 전에 이 설정을 설정해야 합니다.
또는 .NET Framework SetNoOaCache 함수를 호출하여 애플리케이션 자체 내에서 BSTR 캐싱을 사용하지 않도록 설정할 수 있습니다. 이 메서드를 선택하면 SetNoOaCache가 호출될 때 이미 캐시된 BSTR 할당이 캐시된 상태로 유지되므로 이 함수를 일찍 호출해야 합니다.
서비스에서 할당한 내용을 추적해야 하는 경우 OANOCACHE를 시스템 환경 변수로 설정한 다음 Windows를 다시 시작하여 이 설정을 적용해야 합니다.
프로세스 ID 찾기
UMDH는 PID(프로세스 식별자)로 프로세스를 식별합니다. 작업 관리자, 작업 목록 또는 TList를 사용하여 실행 중인 프로세스의 PID를 찾을 수 있습니다.