[C++] CRT Debug Heap(Memory Leak 확인 방법)
저장소/VC++MFC 프로젝트에서는 이런거 필요 없다능...
귀찮아도 해두는 편이 좋으니까 적어둔다능... -_-;
우선 MSDN 링크
[CRT 디버그 힙] http://msdn.microsoft.com/ko-kr/library/aa292300(VS.71).aspx
[디버그 힙] http://msdn.microsoft.com/ko-kr/library/aa292313(VS.71).aspx
링크가 그게 그거임 -_-;
정리한 내용보다 링크가 훨 나음;;
그래도 일단 정리~
C Runtime(CRT) 환경에서 Memory Leak을 확인하는 방법은 아래와 같다.
C Runtime Library인 "crtdbg.h"를 이용하여 디버깅 중 확인할 수 있다.
#include <crtdbg.h>
#define _CRTDBG_MAP_ALLOC
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
#define _CRTDBG_MAP_ALLOC
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
근데 이 내용 MFC 책에서 봤는데... 제목이 뭐였더라;;;
아무튼 일단 저렇게 해두면 됨.
그 다음은 아래와 같다.
일단 진입부에서 아래와 같이 설정한다.
예를 들어 main() 함수가 진입 시작점일 경우
int main()
{
예를 들어 main() 함수가 진입 시작점일 경우
int main()
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
...
...
}
이렇게 해두면 Memory Leak 발생시 MFC에서 보던 것 처럼 나온다.
각 Flag에 대한 설명은 아래와 같다.
여기까지는 준비 과정(?)일 뿐이고 실제로 메모리 릭이 발생했을 때 확인하고자 하는 곳에서 브레이크 포인트를 걸려면 아래와 같이 메모리 할당 번호를 지정하여 확인한다.
int main()
{
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_crtBreakAlloc(메모리 할당 번호);
...
_crtBreakAlloc(메모리 할당 번호);
...
}
이렇게 하면 원하는 메모리 위치를 확인할 수 있다.
열심히 디버깅 하세~ 예~ 붸뷔~ 요~ 체키라웃~
[참고] MSDN, 네이버님, 여러 블로거님들
'저장소 > VC++' 카테고리의 다른 글
[Error/Warning] warning LNK4098 (0) | 2009.08.21 |
---|---|
[C++] DLL에서 메모리 할당, 외부에서 해제 (0) | 2009.08.20 |
SQLite - 쿼리 실행 (0) | 2009.08.19 |
SQLite - 쿼리 실행(어떤거 써야해?) (0) | 2009.08.13 |
[MFC] MFC에서 Thread를 사용할 때는 _beginthread 말고 AfxBeginThread를 사용해야 한다. (0) | 2009.08.07 |