"하드 코어"접근 방식을 제안 할 수 있습니까?
WinDbg 's! heap 명령은 기본 힙에 대한 많은 중요한 정보를 나타낼 수 있습니다. 다음 단계를 수행하여 을 시작하십시오 :
A. GFlags를 실행하고 이미지 파일 탭으로 이동하여 프로세스 이름을 입력하고 탭을 누르십시오.
B. "페이지 힙 사용"및 "사용자 모드 스택 추적 데이터베이스 작성"을 누르고 확인을 누릅니다.
C. 프로세스를 시작하십시오.
위의 단계를 수행하면 프로세스에 대한 메모리 할당 정보를 수집하도록 Windows에 지시합니다. 나중에이 정보를 사용하겠습니다.
중요 :이 정보를 수집하면 응용 프로그램이 더 많은 메모리를 사용하게되고 속도가 느려질 수 있습니다. 윈도우는 여러분이 프로세스를 실행할 때마다이 정보를 계속 수집 할 것이며, GFlags를 시작하고 선택 사항을 제거함으로써 달리 말할 것입니다.
응용 프로그램에 WinDbg를 연결하고 올바른 기호를 설정하십시오. 자신의 기호 옆에 Microsoft 기호가 있어야합니다. .symfix 명령을 사용한 다음 .reload/f를 사용하여 WinDbg가 Microsoft의 기호 서버에서 올바른 기호를 다운로드하도록하십시오 (몇 분이 소요될 수 있음). ! 모든 기호는 다음과 같이 설정 한 후
는 :
A. 힙 -stat을 -
B. 하나의 힙 검사를 선택 모든 프로세스의 힙의 사용 여름을 볼 수 있습니다. 커다란 객체를 찾고 있다면 커밋 된 바이트가 가장 높은 바이트가 좋은 후보가 될 것입니다.
C.! heap -stat -h "heap handle"- 힙에 대한 할당 통계를 볼 수 있습니다. 출력에서 각 할당 크기에 할당 된 블록 수를 확인할 수 있습니다.
D. 더 높은 할당 크기 중 하나를 선택하고! heap -flt s "size"를 사용하여 동일한 크기의 모든 힙 항목을 덤프하십시오.
E.! heap -p -a "UserPtr"은 (다른 정보와 함께) 할당 스택을 인쇄합니다. GFlags를 사용하여 "페이지 힙 사용"을 설정하지 않으면이 정보를 사용할 수 없습니다.
그게 전부입니다. 호출 스택의 정보를 사용하고 소스 코드를 보면 큰 개체를 식별 할 수 있습니다. 이미 설치 Windows 용 디버깅 도구 패키지가없는 경우
B.T.W는
, 당신은 here에서 다운로드 할 수 있습니다.
아마도이 방법은 예상 한대로 간단하지는 않지만 작동합니다. 재미있게 보내십시오.
AQtime을 시도했지만 혼합 모드 응용 프로그램에 문제가있는 것 같습니다. 나는 여러 가지 다른 프로그램 (간단한 "Hello, world"유형의 프로그램 포함)으로 시도했지만 AQtime이 액세스하면 충돌합니다. 제조업체의 지원 –
Hrm에 연락했습니다. 나를 위해 잘 작동합니다. 나는 x86 타겟 혼합 모드 응용 프로그램으로 만 시도해 보았습니다. –