다음을 통해 공유


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를 찾을 수 있습니다.