Windows MFC 8.0 응용 프로그램 (릴리스 빌드)에서 메모리 누수를 찾으려고합니다.MFC 8.0 애플리케이션에서 mallocs의 전체 스택 추적에 액세스하는 방법은 무엇입니까?
인해 VC8 CRT's malloc problem with FPO에 WinDbg는 (또는 UMDH)를 사용하여 할당의 전체 스택 추적을 보여 실패 후, 나는 (즉 DbgHlp StackWalk에 LeakDiag를 사용하여 사용) 만 LeakDiag가하는 것을 실현하는 솔루션이 here을 제안 적용하려고했습니다 C 런타임 할당 자을 모니터링 할 때 로그 파일을 생성하지 마십시오. 그러나 Windows 힙 할당 자이 작동하지만 malloc 호출에서 스택 추적이 끝나는 것을 모니터링 할 때 로그 파일을 생성하지 마십시오.
생성 된 파일에서 함수 이름, 파일 이름, 행 등을 볼 수 있으므로 기호가 올바르게 구성되었습니다.
왜 내가 C 런타임 할당자를 로그 할 수 없는지 아는 사람? 왜 DbgHlp StackWalk API를 사용하더라도 전체 스택 추적을 얻을 수없는 이유는 무엇입니까?
제공할만한 힌트를 제공해 주시면 감사하겠습니다.
추가 정보 :
내 스택 추적 모습 방법 :이 사용 WinDbg가있어
. 주소는! heap -l에 의해 누수 된 블록으로보고 된 주소입니다. 나는 C 런타임 할당 자를 기록 할 수없는 이유
0:000> !heap -p -a 25b18400
address 25b18400 found in
_HEAP @ 2a70000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
25b183f8 0008 0000 [07] 25b18400 00021 - (busy)
Trace: 00a4
7c97d6dc ntdll!RtlDebugAllocateHeap+0x000000e1
7c959d18 ntdll!RtlAllocateHeapSlowly+0x00000044
7c92b298 ntdll!RtlAllocateHeap+0x00000e64
78134d83 MSVCR80!malloc+0x0000007a
나는 인텔 패러렐 스튜디오를 이미 시험해 보았지만 그냥 멈췄다 ... 꽤 무거워서 내 응용 프로그램이다. ... 그 이상으로, 내가 찾고있는 메모리 누출은 프로덕션에서만 발생한다. 개발자 도구가없는 컴퓨터. 나는 컴파일러를 설치할 수 있었지만, IPS가 내 개발 기계에서 시작조차 할 수 없다면 왜 귀찮았 는가 ... 내가 언급 한 다른 도구들을 살펴볼 것이다. 답변 해 주셔서 감사합니다. –
평행 스튜디오의 마지막 버전은 훨씬 강력 해 보입니다. 베타 버전은 그렇지 않았습니다. 그러나 적어도 컴파일러없이 GlowCode를 사용할 수 있습니다. 지금까지 내가 말할 수있는 pdb 파일이 필요합니다. 나는 최근에 그것을 평가했다. 몇 가지 내부 오류가 발생했지만 실시간으로 작동하며 몇 가지 결과가 있습니다. –
GlowCode는 훌륭한 프로파일 러 및 메모리 검사기로 보이지만, 주말 동안 내 응용 프로그램을 프로파일 링하는 데 심각한 문제가 있습니다. 어쨌든 아직 메모리 누수를 찾을 수는 없지만 유용하고 매우 빠르다는 것이 입증되었지만 MFC 8.0 응용 프로그램의 전체 스택 추적을 제공하므로 즉시 응답을 받아 들일 것입니다. . 감사합니다. –