메모리 누수 파악하는 방법 PHD 클래스 사용

기술 자료 번역 기술 자료 번역
기술 자료: 194655 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

요약

메모리 누수를 많은 응용 프로그램에서 문제가 있습니다. 메모리 누수를 확인하는 구체적인 방법은 이 문서에서 제공하는 PHD Visual C++ 클래스를 사용하는 것입니다. PHD 클래스를 사용하여 응용 프로그램에서 메모리 통계 로깅, 메모리 누수가 발생하는 위치를 대한 보다 정확한 아이디어를 얻을 수 있습니다.

자동 압축 풀기 PHD.EXE 있는 포함된 PHD 사용하는 방법을 보여 주는 메모리 누수가 증명할/disprove 클래스 샘플입니다. PHD Windows NT 리소스 키트에서 성능 도우미 함수 주위에 얇은 래퍼 클래스입니다. 이 코드는 Windows NT에서 작동합니다.

추가 정보

다음 파일은 Microsoft 다운로드 센터에서 사용할 수 있습니다.
Phd.exe
릴리스 날짜: Oct-23-1998

Microsoft 지원 파일을 다운로드하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
119591온라인 서비스로부터 Microsoft 지원 파일 구하는 방법
Microsoft는 이 파일에 대한 바이러스를 검색합니다. Microsoft는 파일을 게시한 날짜에 사용할 수 있었던 최신 바이러스 검색 소프트웨어가 사용됩니다. 해당 파일을 무단으로 변경할 수 없는 보안이 향상된 서버에 보관됩니다.
다음 키 파일은 샘플에 포함되어 있습니다.
    FileName                Description
    ---------------------------------------------------------
   PDH.dll                  Contains helper functions used by PHD.
   RKLeak.cpp               Contains the code for the PHD class.
   RKLeak.h                 Header file for the PHD class.
   TestMain.cpp             A simple program to demonstrate the PHD class.
				

PHD 클래스를 사용하려면 RKLeak.cpp 파일을 프로젝트에 포함하십시오. 헤더 파일을 포함시켜 Visual C++ 6.0 함께 제공되는 PDH.lib 라이브러리에 링크가 발생할 수 있습니다. 응용 프로그램을 찾을 수 있도록 경로에 PHD.dll 파일을 추가해야 합니다.

TestMain.cpp 파일을 PHD 클래스를 사용하는 방법을 보여 주는 다음 샘플 코드가 포함되어 있습니다.

예제 코드

   **************************************************
   #include "rkLeak.h"

   void main()
   {

      char *myCntrs[]={
         "\\Memory\\Available bytes",
         "\\Memory\\committed bytes",
         "\\Memory\\pool Paged bytes",
         "\\Memory\\pool Nonpaged bytes",
      };

      PHD mphd2(myCntrs,sizeof(myCntrs)/sizeof(myCntrs[0]));
      PHD mphd;

      const int arSize=4096;
      for (int i=0;i<5;i++){
         double *d = new double[arSize];
         d[0]= 1.;      d[arSize-1] = 2.;  // Force to committed mem.
         mphd.logData(i);
         mphd2.logData(i);
      }

   ***************************************************
				

PHD 생성자의 첫 번째 사용 모니터링할 항목을 지정할 수 있습니다. 이러한 Perfmon.exe 응용 프로그램에서 사용할 수 있는 동일한 항목이 있습니다.

두 번째 PHD 생성자는 인수 없이 사용하여 다음 기본 열 로그를 사용하는: 개인 바이트, 페이지 파일 바이트, 페이징 풀 바이트 페이징되지 않은 바이트 풀 및 작업 집합.

샘플 코드에서 볼 수 있듯이 PHD 클래스 루프에서 의심되는 문제의 API 넣이 사용되며 정기적으로 PHD::logData 메서드를 호출합니다. 데이터가 기록될 파일의 이름이 "< EXE name>_perf.log" 현재 디렉터리에. 이 증가 결과 로그 파일을 전용 바이트의 선형 증가 표시되면 API, 메모리 누수 문제가 없지만 단순히 응용 프로그램에서 메모리 누수가 의미하지는지 않습니다. (예를 들어, 올바르게 초기 호출에 의해 할당된 리소스가 늘려서) API를 잘못 사용할 경우, 결과는 대해서만 메모리 누수가 있는 문제가 있는 API 보여 줍니다. 문제의 범위를 좁히려면 질문에서 API를 실행하는 간단한 가능한 응용 프로그램을 만듭니다.

Visual C++ 5.x 사용자는 RKLeak.h에서 다음 줄을 주석으로 합니다.
   #undef PdhOpenQuery      //          PdhOpenQueryA
   extern "C" long __stdcall
   PdhOpenQuery (
       IN      LPCSTR      szDataSource,
       IN      DWORD       dwUserData,
       IN      HQUERY      *phQuery
   );
				

기타 도구

메모리 누수를 찾는 데 도움이 되는 다양한 타사 디버거에 대한 자세한 내용은 FAQ 페이지 웹에서 검색할 수 있습니다. 예를 들어, 다음 FAQ 여러 제품이 포함되지는 몇 가지 설명합니다.
http://docs.linux.cz/programming/c/www.eskimo.com/~scs/C-faq/q18.2.html
참고 여기서 설명하는 다른 공급업체 제품들은 Microsoft와 무관한 공급업체가 제조하는, 우리는 신뢰성에 대해 어떠한 보증도 하지 않습니다 이러한 제품의 성능이나 신뢰성에. 경우에 따라 이러한 제품을 누수 false 보고서를 만들 수 있지만 여전히 매우 유용한 도구가 됩니다 유의해야 합니다.

또한 API 디버깅 Visual C++ 힙 누수 찾기 위한 유용한 도구입니다. 이러한 함수는 Visual C++ 프로그래머용 가이드는 디버그 함수 참조 단원에 있는 문서화된 _CrtMemDifference() 및 _CrtMemDumpAllObjectsSince(), 같은 포함됩니다. 이러한 함수는 코드 및 다른 구성 요소에서 누수 누수 탐지만.

(c) Microsoft의 1998, 예약 모든 권한. 자세한 Anderson, Microsoft Corporation에 의해 기고물입니다.

속성

기술 자료: 194655 - 마지막 검토: 2014년 2월 22일 토요일 - 수정: 2.5
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Studio 97 서비스 팩 3
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
키워드:?
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB194655 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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