2011-09-22 6 views
2

우리는 여러 가지 효과가있는 플러그인을 사용하여 메모리가 누출되었다는 좋은 증거가 있습니다. 이를 조사하기 위해 vcc 컴파일러/런타임에서 Memory Leak Detection and Isolation으로 놀고 있습니다. 나는 누출 탐지를 가능하게했다 :_crtBreakAlloc, _CRTDBG_MAP_ALLOC을 사용하여 플러그인에서 메모리 누수 추적하기

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

그리고 누수가 잘 풀린다. 그러나 나는 파일 이름과 줄 번호를 얻지 못한다. 내 최고의 추측은 이후에 exe에 의해 소비되는 dll을 구축하기 때문에 #define은 실행 파일이 아니라 내 플러그인이 될 필요가 있다는 것입니다 (이것은 내 정신 모델에 완전히 부합하지 않습니다 이것이 정의하고 포함하는 것이 실제로하는 것의, 그러나 내가 생각할 수있는 최선의 것).

다른 옵션은 특정 메모리 할당 번호에 대한 중단 점을 설정하는 것입니다. 그러나, 누설 할당은 일관된 할당 번호 세트가 아니므로, 나는 그로 인해 성공을 제한하고 있습니다.

여기 아이디어가 있습니까? 이 도구를 더 잘 사용하는 방법 또는이를 조사하는 다른 방법? 감사!

답변

1

#define과 같은 DLL을 다시 컴파일해야합니다. malloc()에 대한 호출을 malloc_dbg()에 대한 호출로 바꾸면 덤프에 파일 이름과 줄 번호가 사용됩니다. 그게 "누출 탐지"의 전부입니다 - 각 할당은 파일 이름과 줄 번호가 전달되고 저장되고 나중에 덤프됩니다. malloc_dbg()에 대한 호출이 없습니다. 파일 이름은없고 행 번호도 없습니다.

또한 누출 덤프 (모든 관련 기능)는 런타임마다 발생합니다. 덤프는 현재 모듈 런타임의 힙에 대해 수행되며 모든 모듈에 대해 수행되는 것은 아닙니다. 프로세스에 여러 C++ 런타임이있을 수 있으므로 (각 DLL은 자체 런타임과 연결될 수 있음) 예상 런타임에 덤프가 수행되지 않을 수도 있습니다.

+0

내가 알 수있는 것처럼, 나는 정의를 완료하고 포함하고 다시 작성했다. 감사. – SirPentor