Memory Leak 검출해 주는 오픈소스

예전에 VC6.0을 사용할때 코딩하고 Debug로 컴파일하면 어느 지점에서 메모리 누수(Leak)가 발생하는지 IDE의 출력창에서 알려주었다. 원래 VC6.0이 그랬는지, 아니면 나도 모르게 뭔가를 설치해서 그랬는지는 기억나지 않지만 말이다. 그런데 VS2003 이후로는 메모리 누수에 대한 보고를 해주지 않는 것이다. 난 한동안 아.. 메모리 누수가 발생하지 않게 잘했나보다 했는데.. 그게 아니란것을 알고 난후, 메모리 누수를 검출해주는 툴을 찾다가 괜찬은 녀석 둘을 만났다.

http://www.codeproject.com/tools/visualleakdetector.asp
http://www.codeproject.com/tools/leakfinder.asp

간단히 소개를 하면, 첫번째는 라이브러리를 Link해주고 vld.h라는 헤더파일 하면 include 해주면 메모리 누수 검출의 준비가 끝난다. 누수의 결과는 IDE 창에서 해주게 되는데 아래의 코드를 작성하고 컴파일하면 IDE의 출력창에 누수의 지점과 내용을 출력해준다.

이것은 필자가 VS6.0에서 경험했던 바로 그것이였다. 그러나 단점은 프로젝트의 코드생성이 다중스레드DLL이냐, 그냥 다중스레드냐에 따라 다른 라이브러리를 링크해줘야 한다는 것과 CRT 메모리에 대한 누수만을 검출해주며 COM 메모리 누수는 검출해주지 못한다. 즉, COM군의 함수중에 메모리를 할당해주는 CoTaskMemAlloc 함수에 대한 메모리 누수는 검출해주지 못하는 것이다. 그러나 IDE와 연동되어 IDE의 출력창에서 누수에 대한 정보를 더블클릭하면 누수지점의 코드로 커서가 이동하는 기능은 상당히 매력적이다.

끝으로 두번째는. 하나의 헤더파일과 그에 대한 하나의 소스파일로 구성되는 간단한 구조인데, StackWalker.h 파일을 include 해주고 누수검출 시작과 끝을 지정하는 함수를 호출해줌으로써 메모리 누수 검출의 준비가 끝나게 되어 무척 사용하기가 쉽다. 게다가 CRT 메모리 뿐아니라 COM 메모리에 대한 누수검출까지 가능하다. 또한 메모리 누수에 대한 정보는 3가지로 구분되는데, 간단한 SImple 모드, 좀더 자세한 Advanced 모드, XML 모드이다. 모두 외부 파일을 통해 누수 정보를 개발자에게 Report한다. 하지만 첫번째 소개했던 누수툴과는 달리 IDE와 연동을 지원해주지 않는다는 단점이 있다.

플렛폼이 Windows라는 범위에만 초점을 맞춰볼적에 비록, 최근의 추세가 Garbage Collection에 의한 자동 메모리 정리 기능이 있어, 메모리 누수에 대한 염려가 많이 줄기는 하였지만, .NET에서 지원하는 C++/CLI는 CLR 메모리만이 아니라, CRT, CLR, Stack 메모리에 까지 접근이 가능하므로 메모리 누수에 대해 주의를 요한다는 점에서 아직까지 이러한 메모리 누수 검출 도구는 유용하다고 하겠다.

[참고] 아래 글의 “줘도 못먹는”에 해당하는 오프소스가 아닙니다.

줘도 못 먹는..

요즘 그렇다. 줘도 못 먹고 있는 그런 상태. 잘 써먹으라고 Open Source로 제공되는, 하지만 다소 불친절하긴 하지만.. 여튼 분명이 실행되는 거고, 써먹기만 하면 내가 원하는 결과물 그 이상을, 또한 GIS 개발자로써 두고 두고 잘 써먹을 수 있는 것이다ㅡ!!

하지만…. 이번주 어제와 오늘, 이틀째 제대로 써먹으려고.. 먹어보지도 못하고 바라만 보고 있는 상태다.. 사실은 예전부터 가끔 분석해 보았던 녀석이였다. 그때도 만만치 않은 놈이란 것을 알았다지만.. 하지만 종국엔 정말 필요해질때 신기하리만치 발휘되는 “이해력”으로 잘 써먹을줄로만 알았다. 그런데 여전이 지금도 이해조차 않된다.. 줘도 못 먹는다.. 경험상 이런 경우.. 분명 이놈은 대박이 분명한 거다.


DCinside의 쿨겔러리에서 redgore님의 “배한척”

다시 원점으로 돌아가서 살펴보아야 겠다. 하나 하나 관련 정의부터 확실이 이해해야 겠다. 그러나 계획대로 할애된 시간은 3일. 그러니까 내일이 마지막 날이다.. 내일은 꼭! 분석 必 해서 멋지게 사용해보자ㅡ!