유용한 프로그래밍 정보

Visual Leak Detector를 이용한 메모리 누수 잡기!

후로링 2016. 10. 25. 12:05

 어느정도 규모 이상의 코드를 짜거나 실행 후 계속 동작하는 프로그램을 짤때 메모리 누수를 관리하는 것이 정말 중요합니다. 


 Visual Studio에서 기본적으로 제공하는 프로파일러도 좋습니다. 하지만 프로파일러 만으로는 메모리 누수를 잡기가 매우 힘듭니다. 메모리 누수가 발생한 블록 정보를 이용해 메모리 누수가 발생하는 라인을 찾으려면 map파일과 cod파일등을 이용해 직접 검색해서 매치를 해나가는 아주 귀찮은 작업을 해야 합니다. 


 Visual Leak Detector는 단순히 헤더파일을 하나 추가하는 것 만으로 쉽게 메모리 누수가 발생한 블록을 선언한 라인을 잡아줍니다.

 아래는 Visual Leak Detector홈페이지의 실행 예시 입니다.




 설치 방법은 다음과 같습니다. 

 https://vld.codeplex.com/ 사이트에 접속하셔서 다운로드 받으신 후 아래 그림과 같이 모두 체크해 주신 후 설치를 진행하시면 됩니다. 



메모리 누수를 잡고싶은 프로젝트를 연 후, 프로젝트-> 속성 -> VC++ 디렉터리 -> 포함 디렉터리에 Visual Leak Detector가 설치된 폴더 내의 include폴더의 경로를 추가 합니다. 



라이브러리 디렉터리에도 마찬가지로 같은 작업을 해줍니다. 



이후 vld.h 헤더를 include 하는 것 만으로 간편하게 사용 하실 수 있습니다. 



디버깅 완료 후 출력창에 다음과 같은 메세지가 뜨는 것을 보실 수 있습니다. 262144의 해제되지 않은 메모리가 있으며 그 메모리를 할당한 라인까지 잡아줍니다. 



 실행이 올바르게 되는데 라인 위치가 안나오는 분들이 계실 수 있습니다. 

 그럴 때는 Visual Leak Detector가 설치된 폴더 내의 vld.ini 파일 내의 설정값을 수정 해주시면 됩니다. ReportEncoding내의 설정값이 ascii로 되어있을경우 unicode로 변경하시면 메모리 누수 발생 지점의 코드 라인을 출력 할 수 있습니다. 



이후 메모리 누수가 발생한 메모리 할당 지점에 맞게 메모리 해제를 해주시면 간단하게 해결 할 수 있습니다.