CRT 라이브러리를 사용해 메모리 누수(Leak) 찾기..
D2D프레임워크를 만들어보자 해서 코드를 짜던중 프로세스가 남아있는 버그가 발생했다.
메모리 디버깅하는 방법을 찾던 중 코드에서 한번에 찝어볼 수 있는 방법을 찾았다.
방법은 간단하게 헤더 포함 후 코드 삽입.
#define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h>
MSDN에서는 포함할때의 순서로 위의 순서를 권장하고 있다.
_CRTDBG_MAP_ALLOC를 정의 해줌으로써 어느 파일의 몇번째 라인까지 표시를 해준다는것 같은데.. 내 코드에선 작동하지 않더라..
우선 누수 되는 곳을 찾으려면 다음과 같이 프로그램의 종료지점에 한줄만 삽입하면 된다.
System->Shutdown(); delete System; System = 0; _CrtDumpMemoryLeaks(); return 0;
코드를 수정했으면 F5(디버그 모드)로 실행한다.
그러면 출력(Output)창에서 코드 실행 시점에서 해제되지 않은 메모리를 잡아서 보여준다.
메모리 할당 번호, 블록형식, 16진수 메모리 위치, 블록 크기
블록 내 첫 16비트 데이터
찍히는 로그는 이러한 형식이다.
블록 형식에 대한 설명은 MSDN에서 더 자세히 볼 수 있다.(링크)
이제 메모리 할당 번호를 가지고 메모리가 할당 되는 부분에 중단점을 설정할 수 있다.
_CrtSetBreakAlloc(할당 번호);
프로그램의 시작지점에 코드를 삽입하고 다시 디버그 모드로 실행하면 해당 할당 번호의 메모리가 할당 되는 위치에서 중단된다.
MSDN 페이지 - https://msdn.microsoft.com/ko-kr/library/x98tx3cf.aspx
'Visual Studio' 카테고리의 다른 글
Visual Studio 2013 라이브러리 경로에 대한 깨달음 (0) | 2015.11.29 |
---|