문제

CRT 메모리 누출 감지를 사용하려고 노력하고 있지만 Microsoft Visual Studio에서 다음과 같은 메시지를 계속 받고 있습니다. "감지 된 메모리 누출 - 물체 덤프 건너 뛰기" 나는 실제로 그것을 할 수없고 실제로는 덤프를 할 수 없습니다.

메모리 누출 감지에 관한 Microsoft 기사의 지시를 따랐습니다.http://msdn.microsoft.com/en-us/library/e5ewb1h3(vs.80).aspx) 운이 없습니다.

내 stdafx.h에서 나는 (전체 프로젝트를 재건 됨) :

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

내 응용 프로그램의 진입 점에서 나는 다음과 같습니다.

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

또한 파일 이름과 줄 번호가 Microsoft 광고 형식으로 표시되기를 바랍니다.

Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

나는 객체 덤프를 얻을 수 없었지만 다른 사람들은이 줄을 따라 무언가를 본다는 것을 알았습니다 (_crtdbg_map_alloc도 정의했습니다).

Detected memory leaks!
Dumping objects ->
{18} normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

나는 새로운 운영자와 삭제 연산자를 우선하는 데 시간을 보내고 싶지 않기 때문에 CRT 디버깅이 도움이되기를 바랐습니다. 이것이 작동하지 않으면 새로운 연산자와 삭제 연산자를 재정의 할 수 있지만 파일 이름과 줄 번호 (크로스 손가락)로 할당 정보를 얻고 싶습니다.

고마워, 키릴

도움이 되었습니까?

해결책

여기에 내 컴퓨터에 포함되어 있지 않지만 MSVC를 설치하면 C 런타임 라이브러리 (예 : MSVCRTXX.XXX 용) 소스 코드를 설치하는 옵션이 있습니다. "객체 덤프 스크리핑"에 대한 해당 소스 코드를 보면 객체 덤프가 건너 뛰는 이유를 알아낼 수 있습니다.

다른 팁

방금 사용했습니다 시각적 누출 감지기 _crtDumpMemoryLeaks 접근법을 사용하여 파일 이름/라인 번호가없는 유출 물체의 큰 덤프를 얻은 후. VLD는 광고대로 일했고 (무료입니다) 나는 그것에 매우 만족합니다.

파일 이름과 줄이 인쇄 된 이유는 할당이 new 지나가는 매크로 __FILE__ 그리고 __LINE__. 만지고 싶지 않다면 new, 당신은지나 가지 않을 것입니다 __FILE__ 그리고 __LINE__ CRT에 그리고 그것은 그것을 인쇄 할 수 없습니다. 여기에는 큰 마법이 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top