누수를 Umdhtools.exe: umdh.exe를 사용 하 여 메모리를 확인 하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 268343 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR268343
모두 확대 | 모두 축소

이 페이지에서

요약

사용자 모드 덤프 힙 (UMDH) 유틸리티와 협력의 운영 체제는 특정 프로세스에 대 한 Windows 힙 할당을 분석 합니다. 이 유틸리티 및 기타 관련 도구는 주로 대상입니다. Windows 2000 및 Windows XP에 대 한. 클릭 하 여 플레이 이 스트리밍 미디어 데모를 보려면 단추입니다.

참고 ® ACELP 코덱을 사용 하 여 비디오 코딩, 사용할 수 있는 무료 ACELP ® 코덱을 설치 해야 http://www.acelp.net/acelp_eval.php



참고 때문에 malloc C 런타임 (CRT) 모듈에서 함수 Windows Server 2003의 최초 릴리스 버전을 사용 하 여 프레임 포인터 생략 (FPO), 전체 스택 정보를 볼 수 없습니다를 malloc UMDH 도구를 사용 하는 함수입니다. 이 문제는 Windows Server 2003 서비스 팩 1 (SP1)의 CRT 모듈에서 해결 되었습니다. 따라서 Windows Server 2003 sp1에서 malloc 함수 전체 스택 정보를 볼 수 있습니다.

추가 정보

UMDH를 사용 하기 전에

메모리 누수가 발생 하는 것을 생각 하는 경우 메모리 누수는 것으로 표시 되지 않습니다. 경우도 있는 메모리 누수는 실제 메모리 누수가 아니지만 성능이 향상 됩니다. 에 대 한 예를 들어, Microsoft Jet 데이터베이스 엔진은 많은 양의 메모리 소모 될 수 있습니다. (256MB 컴퓨터에서 최대 128MB) 데이터를 검색 하 고 기록 하기 때문에 캐시합니다. 캐시는 Jet 엔진이 빠른 미리 읽기와 미리 쓰기를 얻을 수 있습니다. 버퍼링 합니다.

프로세스의 발생 여부를 확인 하려면 메모리 누수, Windows 성능 모니터 (Perfmon.exe)를 사용 하 고 개인을 모니터링 합니다. 프로세스 범주를 응용 프로그램에 대 한 바이트 수입니다. 전용 바이트는 프로세스에 할당 한 하지만 상호 공유 되는 총 메모리 처리합니다. Note이 가상 이기도 바이트에서 다른입니다 모니터링할 흥미로운. 가상 바이트는 현재 크기 (바이트)를 프로세스를 사용 하 여 가상 주소 공간입니다. 응용 프로그램 가상 누수 될 수 있습니다. 메모리는 있지만 할당 된 private bytes의 차이 볼 수 없습니다. 하지만 개인 바이트 수를 모니터링 하면 메모리 표시 되지 않는 경우 보려면 모니터의 가상 바이트 메모리 부족 실행 중인 의심 가상 메모리를 사용 하는 경우. 메모리 누수 및 Windows 성능 모니터 (Perfmon.exe)의 개요를 검색 하는 방법에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.
http://msdn.microsoft.com/en-us/library/ms404355.aspx
응용 프로그램 메모리가 누수 되는 있는지 확인 하는 많은 반복 루프에서 코드를 생각 하 고 개인을 모니터링 하 고 모든 메모리 증가 대 한 가상 바이트입니다. 볼 수 전용 바이트 및 가상 바이트의 최종적으로 동일 하 게 유지 하지 않습니다, 수 증가 중지 합니다. 지점에서 멈추는 경우 증가 (예를 들어,이 무한히 증가 계속 되지 않습니다)를 사용 하면 가능성이 있지만 메모리 누수를 볼 수 없습니다, 증가 하는 캐시를 참조 하십시오 해당 최대 크기입니다.

전에 메모리 누수를 볼 것을 확인 한 경우 UMDH를 사용 하려면 다음과 같이 하십시오.
  1. UMDH 유틸리티를 설치 합니다.
  2. 설정 시스템 PATH 환경 변수를 포함 하는 UMDH를 설치한 폴더입니다.
  3. _NT_SYMBOL_PATH 환경 변수를 설정는 Microsoft 기호 서버 경로 디버그 기호 UMDH를 찾을 수 있도록 파일입니다.
UMDH 유틸리티는 디버깅 도구에 포함 되어 Windows 제품에는 다음 Microsoft 웹 사이트:
http://www.microsoft.com/whdc/devtools/ddk/default.mspx
다운로드 및 유틸리티를 설치 하 고 시스템 경로 설정 환경 변수를 디버깅 도구를 설치한 경로로.

UMDH를 사용 하기 전에 올바른 디버그 기호를 설치 해야 응용 프로그램 및 운영 체제 구성 요소입니다. Microsoft를 사용 합니다. 기호 서버를 사용 Microsoft 구성 요소의 디버그 기호를 얻을 수 있습니다. 자세한 내용은 Microsoft 기호 서버에 대 한 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.
311503Microsoft 기호 서버를 사용 하 여 디버그 기호 파일을 구하려면
UMDH를 시도 사용 하 여 기호 파일을 찾을 수 있는 _NT_SYMBOL_PATH 환경 변수입니다. 명령에서 경로 설정 하는 명령 프롬프트는 다음과 같습니다.
_NT_SYMBOL_PATH 설정 = SRV * c:\LocalSymbolCache
기호화 된 디버깅 설정 하는 방법에 대 한 자세한 내용은 자세한 내용은이 문서 뒷부분의 "디버그 기호" 절을 참조 하십시오.

이러한 단계를 완료 하면 UMDH 유틸리티를 사용할 수 있습니다.

UMDH에 덤프 힙 캡처

UMDH 정보는 힙 덤프 유틸리티입니다. 프로세스에 할당 합니다. 호출 스택의 각각에 대해이 정보를 포함 할당, 해당 호출 스택을 통해 만든 할당 수 및 해당 호출 스택을 통해 사용 되는 바이트 수입니다. 예를 들면 다음과 같습니다.
00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
           ntdll!RtlDebugAllocateHeap+0x000000FD
           ntdll!RtlAllocateHeapSlowly+0x0000005A
           ntdll!RtlAllocateHeap+0x00000808
           MyApp!_heap_alloc_base+0x00000069
           MyApp!_heap_alloc_dbg+0x000001A2
           MyApp!_nh_malloc_dbg+0x00000023
           MyApp!_nh_malloc+0x00000016
           MyApp!operator new+0x0000000E
           MyApp!LeakyFunc+0x0000001E
           MyApp!main+0x0000002C
           MyApp!mainCRTStartup+0x000000FC
           KERNEL32!BaseProcessStart+0x0000003D
				
이 UMDH 출력 된 21280 (0x5320) 표시 할당 된 바이트 수 호출 스택의의 총 수입니다. 21280 바이트가 할당에서 20 (0x14) 1064 바이트 (0x428)의 할당을 구분 합니다. 호출 스택을 제공 되는 Backtrace00053의 식별자입니다.

힙 덤프 파일을 생성. 할당 한도에 포함 되어 있는 Gflags.exe 유틸리티를 사용 해야 운영 체제를 알 수 있도록 Windows 용 디버깅 도구 제품 커널이 할당을 추적 하도록 합니다.

원하는 가정 합니다. notepad.exe에 대 한 heap(s) 내용을 덤프. 우선 스택 추적을 활성화 해야 테스트 하려는 응용 프로그램에 대 한 인식. 이 기능을 사용할 경우 기본적으로 사용할 수 없습니다. 이 기능을 설정 하는 명령은 다음과 같습니다.
gflags-i notepad.exe + ust
명령을 프로세스에 대 한 스택 추적을 사용 하지 아직 실행 되 고 있지만 스택 추적을의 모든 이후 실행에 있습니다. Notepad.exe. 또는 플래그 GFLAGS 통해 설정할 수 있습니다. Gflags.exe 사용자 인터페이스를 얻으려면 인수 없이 실행 되는 인터페이스입니다. 사용 는 -ust gflags 사용 하는 경우 스택 추적을 사용 하지 않으려면 옵션 디버깅을 완료 합니다.

Gflags.exe 통해 이미지 플래그를 설정할 경우, 및 디버그 기호를 설정 하 고 (메모장을 시작할 수 있습니다. UMDH를 사용 하는 응용)입니다. 프로그램이 시작 된 후에 수행 해야 합니다. 방금 시작한 메모장 프로세스의 PID (프로세스 ID)를 확인 합니다. 명령은 다음과 같습니다.
tlist
TLIST 응용 프로그램의 출력에서 PID를 찾을 수 있습니다. 또한 작업 관리자에서 PID 정보를 얻을 수 있습니다. PID를 가정 합니다. 방금 시작한 메모장 프로세스는 124입니다. UMDH를 사용 하 여 볼 수 있는 다음 명령 사용 하 여 힙 덤프:
umdh-p: 124-f:notepad124.log
결과: 전체 힙 덤프에서 메모장 프로세스의 경우에 Notepad124.log 파일입니다. 이 파일에 모든 내용을 할당 표시 및 호출 스택을 위치 할당이 만들어진 의입니다.

Umdh.exe UMDH 로그 비교를 사용 합니다.

UMDH 로그 파일에 대 한 중요 한 정보를 포함 하는 힙 찾기에 관심이 있는 경우에 프로세스의 현재 상태를 메모리 누수는 수 두 로그의 출력을 비교 하는 것이 더 유용할 및 두 덤프 파일 사이 가장 큰 증가 표시 된 어떤 호출 스택을 클릭 하십시오. Umdh.exe 유틸리티는 분석을 제공 하는 두 UMDH 로그를 비교 하는 데 도움이 됩니다 있는 이들 간의 차이입니다. 두 로그를 캡처한 다른에 한 번 간격에서 다음 다음 명령을 사용 하면 됩니다.
UMDH dh1.log dh2.log > cmp12.txt
-또는-
UMDH-d dh1.log dh2.log > cmp12.txt
-d 명령줄 옵션 대신 10 진수로 표시 하도록 UMDH에 지시 16 진수입니다. 명령 출력의 차이 비교를 할당 간에 두 개의 로그 및 유사한 정보를 제공 합니다. 다음:
+ (f110 9df0 바이트가) 5320 3a 할당 BackTrace00053 총 증가 = 5320
UMDH 로그 파일에서 각 Backtrace는 비교 두 로그 파일 사이 변경 합니다. 이 경우는 마지막 로그 파일 표시 UMDH에 지정한 명령줄이 0xF110 바이트가 할당 하는 동안 첫 번째 했습니다. UMDH 명령줄에 로그는 같은 backtrace 0x9df0 바이트가 바이트 해야 했습니다. (호출 스택)입니다. "5320"은 할당 된 바이트 수의 차이입니다. 에서 이 경우 있었고 0x5320 바이트가 할당 된 시간 사이는 두 로그를 캡처한. 바이트를 함께 제공 된에서 식별 되는 호출 스택 "BackTrace00053"입니다.

다음 단계에는 지 알아볼 것 backtrace입니다. 두 번째 로그 파일 및 검색을 여는 경우 BackTrace00053다음과 유사한 무언가 찾을 수 있습니다.
00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
           ntdll!RtlDebugAllocateHeap+0x000000FD
           ntdll!RtlAllocateHeapSlowly+0x0000005A
           ntdll!RtlAllocateHeap+0x00000808
           MyApp!_heap_alloc_base+0x00000069
           MyApp!_heap_alloc_dbg+0x000001A2
           MyApp!_nh_malloc_dbg+0x00000023
           MyApp!_nh_malloc+0x00000016
           MyApp!operator new+0x0000000E
           MyApp!LeakyFunc+0x0000001E
           MyApp!main+0x0000002C
           MyApp!mainCRTStartup+0x000000FC
           KERNEL32!BaseProcessStart+0x0000003D
				
호출 하는 경우를 볼 수 있는 LeakyFunc 함수는 Visual c + + 런타임 라이브러리를 통해 메모리를 할당합니다. 연산자 새 함수입니다. 할당으로 확장 되는 경우 더 많은 덤프 파일, 메모리 결론을 내릴 수 있습니다 해제 되지 않고 있습니다.

스택 추적 설정

UMDH 로그에서 가장 중요 한 정보는 스택 추적입니다. 힙 할당의. 프로세스에서 힙 누수 되는지 여부를 분석할 수 있습니다. 메모리입니다. 이러한 스택 추적은 기본적으로 획득 됩니다. 이 사용할 수 있습니다. 각 프로세스 또는 시스템 기능입니다. 다음 명령을 사용 하 여 스택을 사용 합니다. 시스템을 추적 합니다.
gflags-r + ust
이 명령에 다음 컴퓨터를 다시 시작 합니다. 각 프로세스에 대 한 지정한 명령으로 다음과 같습니다.
gflags-i 응용 프로그램 이름 + ust
위치 응용 프로그램 이름 실행 파일의 파일 이름 확장명을 포함 하 고 예를 들어, Services.exe, Lsass.exe. 명령이 스택 추적을 설정 하지 않습니다. 이미 실행 중인 프로세스에 대 한. 할 수 없는 프로세스에 따라서 (예: 서비스, lsass, winlogon)를 다시 시작 하 고 테스트를 다시 시작 해야 컴퓨터입니다.

다음 명령을 사용 하 여 설정 사항을 확인 합니다. 시스템 또는 특정 프로세스에 대 한 설정 되었습니다: 시스템:
gflags-r
특정 프로세스의 경우:
gflags-i 응용 프로그램 이름
기본적으로 최대 스택 추적 깊이 16입니다. 원하는 경우 더 깊은 호출 스택을 표시 GFLAGS를 실행 하 여 늘릴 수 있습니다. 선택 합니다. 시스템 레지스트리를 클릭 하 고 다음에 새 깊이 입력의 최대입니다. 스택 추적 캡처 깊이 컨트롤을 편집 합니다. 클릭 적용를 클릭 하 고 컴퓨터를 다시 시작 합니다.
중요 한: Windows NT 4.0 서비스 팩 6을 사용 하는 경우 사용 합니다. Umdh.exe를 하 고 대신 umdh_nt4.exe를 사용 해야 하는 gflags -r 시스템 단위 스택 추적을 설정 하는 명령입니다. 있는지 확인 하면 컴퓨터를 다시 시작 합니다. Umdh_nt4 스택 추적에서 작동 하지 않습니다는 프로세스당 Windows NT 4 버전으로. 전체 시스템을 설정 해야 합니다.

디버그 기호

UMDH를 사용 하 여 가장 중요 한 단계 중 하나가 있는지 확인 하는 것 좋은 스택 추적을 가져오려면 적절 한 기호 파일 (.dbg 또는.pdb 파일) 있는지 확인 하십시오. 최소한 Kernel32.dbg 및 Ntdll.dbg 기호 파일이 필요 합니다. 할 수 있습니다. 추가 정보를 찾을 때 필요한 추가 디버그 기호 획득 에 대 한 구성 요소에서 메모리가 누수. 자세한 내용은 Microsoft에 대 한 디버그 기호 파일을 구하는 방법에 대 한 구성 요소, Microsoft 기술 자료의 다음 문서 번호를 클릭 하십시오.
311503Microsoft 기호 서버를 사용 하 여 디버그 기호 파일을 구하려면
사용 하는 방법에 대 한 자세한 정보는 Microsoft 기호 서버 및 Windows 기호 패키지를 구하는 방법의 다음 Microsoft 웹 사이트:
http://www.microsoft.com/whdc/devtools/ddk/default.mspx
Visual c + + 구성 요소를 만들 경우에 프로그램 데이터베이스에 대 한 편집 않은 및 c + +의 계속을 선택 합니다. 컴파일러 옵션입니다. 대신 프로그램 데이터베이스를 선택 합니다. 기호 경로 설정 하려면 _NT_SYMBOL_PATH 환경 변수 경로 사용할 수 있도록 초기화 합니다. 사용자 Microsoft 기호 서버를 사용 하 여 Microsoft에 대 한 기호를 얻을 수 있습니다. 구성 요소입니다.
311503 Microsoft 기호 서버를 사용 하 여 디버그 기호 파일을 구하려면
_Nt_symbol_path를 설정 하려면 다음이 단계를 수행 하십시오. 환경 변수:
  1. 제어판을 두 번 클릭 합니다. 시스템.
  2. 클릭 하 여 고급 탭을 클릭 하 고 환경 변수입니다.
_NT_SYMBOL_PATH 환경 변수를 설정할 수도 있습니다 UMDH를 실행 하기 전에 명령 창입니다.

참고:도 구성 요소에 대 한 Pdb의 경로 포함 하 여 응용 프로그램입니다. 예를 들어, _nt_symbol_path의 경로 다음과 같이 설정:
SRV*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\myapplicationssymbols
이 경로의 첫 번째 부분은 Microsoft 기호 서버를 가리킵니다. 상태를 사용 하 여 기호를 c:\symbols에 다운로드 되도록 하 고 폴더입니다. PDB 파일의 경로를 세미콜론 뒤에 오는 부분이입니다. (기호 파일) 누수 응용 프로그램에 대 한 구체적으로 합니다.

UMDH 호출

UMDH에 필요한 유일한 명령줄 매개 변수는 -p 프로세스의 PID를 지정 하는 옵션은 힙 덤프를 얻을 수 있습니다. 작업 관리자를 사용 하 여 PID를 얻을 수 있습니다 또는 Tlist.exe 프로그램입니다. 다음과 유사한 명령의 경우는 로그 됩니다 표준 출력으로 덤프 합니다.
umdh-p: PID
또한 UMDH 표준에 다양 한 알림 메시지 표시 오류, 및 리디렉션하지 않는 경우 따라서이 실제 로그와 섞이게 됩니다. UMDH 정보 메시지를 한 파일에 모으려면 다음 명령을 사용 하십시오.
umdh-p: PID 2>umdh.msg
Umdh 파일에 덤프 하 여 로그를 수집 하는 경우 다음 명령 중 하나를 사용 하십시오.
umdh-p: PID > umdh.log
-또는-
umdh-p: PID-f:umdh.log
이 두 명령은 동일 합니다.

기본 로그 인 얻을 UMDH 정렬 된 힙 사용자가 열거를 포함 합니다. 할당 수입니다. 디버깅을 위해 또한 덤프 파일 모두에 필요한 경우 할당 된 블록에 해당 하는 스택 추적의 -d 옵션을 사용할 수 있습니다.
umdh-p: PID d
이 명령을 사용 하는 경우는 UMDH에서 다음 표시 될 수 있습니다. 로그 파일:
할당을 추적 BackTrace00046: 005F69A0 005F6150
이러한 할당에 대 한 메모리 주소입니다. 호출 스택입니다. 디버거를 프로세스에 연결 되어 있으면 덤프 수 있는 할당 된 보려면 이러한 주소에 메모리 내용.

로그에 너무 많은 정보가 포함 된 경우에만 제한 될 수 있습니다. 큰 사용자에 게 할당 된 특정 임계값을 초과 개수를 계산 합니다. 사용의 다음 명령:
umdh-p: PID t: 임계값
모든 명령줄 옵션 (예를 들어, -p-f,-t, d) 순서에 관계 없이 동시에 지정할 수 있습니다. 다음은 보다 복잡 한 명령줄 예:
umdh-p: 123-t: 1000-f:umdh.log-d
이 명령은 PID 123으로 사용 하 여 프로세스 힙 덤프 Umdh.log 파일입니다. 이 스택 추적만 해당 계정에 대 한 1000 개 이상의 덤프 할당 하 고이 주소는 힙 블록도 덤프 각 스택 추적을 통해 할당 합니다.

다른 유용한 UMDH 옵션이입니다. 는 -l 옵션입니다. 그러면 파일 및 줄 번호를에서 인쇄 하는 호출 스택 가능 합니다.

UMDH 출력 설명

로그를 리디렉션한 경우에 파일 (umdh-p: PID-f:umdh.log), 내용을 가져온 다음에 유사 메모장 프로세스를 실행 합니다.
UMDH: Logtime 2000-06-28 10:54 - Machine=MYMachine - PID=704
   *********** Heap 00270000 Information ********************
       Flags: 58000062
       Number Of Entries: 87
       Number Of Tags: <unknown>
       Bytes Allocated: 00008DF0
       Bytes Committed: 0000A000
       Total FreeSpace: 00001210
       Number of Virtual Address chunks used: 1
       Address Space Used: <unknown>
       Entry Overhead: 8
       Creator:  (Backtrace00007)
           ntdll!RtlDebugCreateHeap+0x00000196
           ntdll!RtlCreateHeap+0x0000023F
           ntdll!LdrpInitializeProcess+0x00000369
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007
   *********** Heap 00270000 Hogs ********************
   000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00031
           ntdll!RtlDebugAllocateHeap+0x000000FB
           ntdll!RtlAllocateHeapSlowly+0x0000005B
           ntdll!RtlAllocateHeap+0x00000D81
           ntdll!LdrpAllocateDataTableEntry+0x00000039
           ntdll!LdrpMapDll+0x000002A4
           ntdll!LdrpLoadImportModule+0x0000010D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpInitializeProcess+0x000009DC
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007

   000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00034
           ntdll!RtlDebugAllocateHeap+0x000000FB
           ntdll!RtlAllocateHeapSlowly+0x0000005B
           ntdll!RtlAllocateHeap+0x00000D81
           ntdll!LdrpAllocateDataTableEntry+0x00000039
           ntdll!LdrpMapDll+0x000002A4
           ntdll!LdrpLoadImportModule+0x0000010D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpInitializeProcess+0x000009DC
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007
				
로그의 모든 프로세스에서 힙 덤프를 포함 되어 있습니다. 이 예제에서는 로그는 주소 270000에서 힙을 시작합니다. 에 대 한 몇 가지 전역 카운터 후 힙 덤프를를 내림차순으로 정렬된의 스택 추적 로그 포함 되어 있습니다. 대부분의 할당을 담당합니다. 움직임을 비교 하는 경우 여러 순간에 사용 되는 메모리에서 발생 한 추론할 수 있는 프로세스 및 힙 사용 누수가 되는 경우.

UMDH를 사용할 때 발생할 수 있는 문제

UMDH를 사용할 때 가장 일반적인 오류 때문에 발생할 스택 추적을 사용할 수 없습니다. 또한 ntdll.dll에 [NULL]에 대해 잘못 된 기호 UMDH를 하지 다음 중 하나를 실행 합니다. 다른 기호 파일의 경우 UMDH는 실행 되지만 로그 파일 스택에 포함 함수 이름이 없는 대신 상대 주소가 있는 추적 모듈 안에 있습니다. 세 번째 오류는 잘못 된 PID를 지정 됩니다. 다음 없는 프로세스에 [NULL]에 대해 UMDH를 실행 하려고 하면 오류 메시지 발생 스택 추적:
C:\>umdh-p: 1140 UMDH: Logtime 2000-06-28 12: 43-컴퓨터 MyMachine-PID = = 1140 연결.모듈 열거를 완료 합니다. (프로세스, ntdll SymGetSymFromName!RtlpStackTraceDataBase, xxx) 실패 한 마지막 오류 126 = UmdhGetAddrFromName 스택 추적 DB를 찾을 수 없습니다. 포인터 (ntdll!RtlpStackTraceDataBase)입니다. ntdll.dll 기호가 잘못 되었습니다. 우리 심볼 가져오기 볼 수 있어야 합니다.
다음 명령에 사용 합니다. 조사 중인 프로세스에 대 한 설정을 다시 한 번 확인 합니다.
gflags-i APPNAME
다음 명령을 사용 하 여 시스템 단위 스택에 의존 하는 경우 추적:
gflags-r
이러한 명령은 응용 프로그램에 설정 된 플래그 목록을 보여 줍니다. 이때 시스템 단위 스택 추적의 경우, 기능으로 표시 하지만 실행 후 시스템을 다시 하지 않는 경우 현재는 gflags-r + ust 명령을 실제로 활성화 되지 않습니다. 알고 싶으면 모든 스택 추적을 포함 하는 응용 프로그램에서 USTEnabled 키를 볼 수 있습니다. 다음 레지스트리 키 아래:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image 파일 실행 옵션
스택 추적을 설정한 프로세스에서 UMDH를 실행 하면 되지만 플래그를 설정한 이후로 응용 프로그램을 다시 시작한, 나타날 수 있습니다. 로그에 다음과 같은 메시지가:
스택 추적을 했습니다. 이 할당에 대 한 저장지 않습니다 (인덱스 = 0)
실행 하는 경우 설정 하지는 올바른 기호 경로 또는 기호 잘못 되 고 UMDH를 실행 한 수 있습니다. 오류 메시지가 로그에 나타납니다. 그러나만 잘못 나타날 수 또는 잘못 된 호출 스택입니다. 올바른 기호를가지고 있는지 확인 하려면 시작을 예를 들어, 프로세스에 [NULL]에 대해 NTSD 시스템 디버거:
ntsd 메모장
그런 다음 디버거 콘솔에서 실행을 LD 명령 모듈에 대 한 기호 정보를 로드 하 고 있는 LM 어떤 모듈에서 기호를 로드 했는지 나열 하는 명령입니다. 경우는 출력은 LM 내보내기 기호가 로드 명령을 표시, 기호를 것입니다. If PDB 기호가 로드 된, 기호입니다. 나타날 수 있는 잘못 된 PID를 지정 하는 경우 다음 오류 메시지:
C:\>umdh-p: 1000 UMDH: Logtime 2000-06-28 09: 45-컴퓨터 MyMachine-= PID = 1000 연결... OpenProcess 실패, 마지막 오류 0x57 =

Visual Basic에서 UMDH 호출

때로는 시간이 지나면서 많은 로그를 덤프 하는 것이 유용할 수 있습니다. 누수를 매우 쉽게 알아차릴 수 있기 때문에 처음. 예를 들어, 경우에 ASP (Active Server Pages) 웹 응용 프로그램 메모리가 누수 되는 생각을 에 조개 껍데기 Visual basic에서 COM 구성 요소를 작성 하는 것이 도움이 될 수 있습니다. UMDH입니다. 다음 ASP 페이지에서 해당 구성 요소를 호출할 수 있습니다.

는 다음은 UMDH를 호출 하 고 로그 파일을 만들고 일부 Visual Basic 코드입니다. 현재 시간 기준입니다.
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
      Public Function GetProcessID()
      GetProcessID = GetCurrentProcessId()
      End Function  
   .
   .
   .
      Dim strTime As String

      Dim sProcID As String
      sProcID = GetProcessID()
      strTime = "MYLOG_" & Format(Now(), "hhmm")
     
      Shell ("C:\UMDH\umdh -p:" & sProcID & " -f:d:\logs\" & strTime & ".txt")
				

Windows NT 4.0 서비스 팩 6a와 UMDH를 사용 (SP6a)

디버깅 도구에 포함 되어 있는 UMDH 유틸리티 Windows 제품에는 Windows NT 4.0에서 작동 하지 않습니다. 자동 압축 풀기 실행 파일 (Umdhnt4tools.exe)이이 문서에 포함 되어 있으며 다음을 포함 NT 4.0을 사용 하는 데 사용할 도구를 제공 합니다.
  • Umdh_nt4.exe 및의 Dbghelp.dll
    Windows NT가 4.0 SP6 버전의 UMDH 유틸리티입니다.
  • Dhcmp.exe
    이 유틸리티는 두 UMDH를 비교할 사용 됩니다. 가능한 메모리 위치를 확인 하려면 덤프 미래의 누수.
는 다음 파일 Microsoft 다운로드에서 다운로드할 수 있습니다. 센터:
그림 축소그림 확대
다운로드
지금 Umdhnt4tools.exe 다운로드
릴리스 날짜: 2002 년 8 월 28 일

Microsoft 지원 파일을 다운로드 하는 방법에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.
119591 온라인 서비스 로부터 Microsoft 지원 파일을 구하는 방법
Microsoft는이 파일을 검색 합니다. Microsoft는 파일을 게시 한 날짜에 사용할 수 있었던 최신 바이러스 검색 소프트웨어를 사용 합니다. 파일은 무단으로 변경할 수 없도록 보안이 향상 된 서버에 저장 됩니다. Umdh_nt4.exe 및의 dbghelp.dll을 폴더에 저장 한 다음 먼저 PATH 환경 변수에 넣습니다. 대신 umdh_nt4.exe를 사용 합니다. UMDH입니다.

Windows NT 4.0을 실행 하는 컴퓨터에서 사용 해야 Gflags.exe를 사용 하는 시스템 단위 스택 추적을 설정 합니다. 예를 들면 다음과 같습니다.
gflags-r
컴퓨터를 다시 시작 해야 합니다. Umdh_nt4 스택 추적 Windows NT 버전 4.0에서 프로세스 단위 별로 작동 하지 않습니다. 이 대 한 설정 전체 시스템입니다.

UMDH_NT4 UMDH 달리 않습니다 하지 않습니다. 로그 파일을 비교 합니다. 예를 들어 다음을 수행할 수 없습니다.
UMDH_NT4 dh1.log dh2.log &gt; cmp12.txt
대신에 포함 되는 Dhcmp.exe 유틸리티를 사용 해야 이 문서에서. 명령은 다음과 같습니다.
DHCMP dh1.log dh2.log &gt; cmp12.txt

속성

기술 자료: 268343 - 마지막 검토: 2011년 5월 18일 수요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Server 4.0 Standard Edition
  • Microsoft Windows NT Workstation 4.0 Developer Edition
키워드:?
kbdownload kbarttypeshowme kbfile kbgraphxlinkcritical kbhowto kbsample kbmt KB268343 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
이 문서의 영문 버전 보기:268343

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com