본문 바로가기

c c++ mfc

GFlags 를 이용하여 메모리 누수 찾기

반응형

오늘은 C/C++, MFC를 이용한 Windows Application 개발중에 직면할 수 있는 메모리 누수 문제를 해결할 수 있는 툴에 대해 기록하려 합니다.

 

1. 설치파일 찾기

GFlags 는 Windows용 디버깅 도구입니다. google에서 검색하면 설치할 수 있는 페이지를 찾을 수 있습니다. 타고 타고 들어가면 아래 세번째 그림과 같이 WDK 설치페이지까지 갑니다. 거기서 2단계, SDK를 설치하면 됩니다. 

검색페이지
설치페이지
설치페이지
설치파일

2. 설치

설치파일을 실행하면 다음과 같은 화면이 나오는데 여기서 'Debugging Tools for Windows' 를 체크하여 설치합니다. 나머지는 필요에 따라 선택하시면 됩니다.

설치화면

3. 실행

windows 좌측하단의 검색버튼에서 gflags를 검색하여 실행합니다.

실행화면

그러면 다음과 같은 gflags 화면이 출력됩니다. 여기서 'Image File' 탭으로 이동합니다.

거기서 내가 메모리릭을 모니터링할 파일의 경로 및 프로세스 이름의 FullPath를 넣고 Tab버튼을 클릭하면 나머지 화면이 활성화 됩니다.

경로입력후화면

이는 cmd를 실행하여 설정할 수도 있습니다.

cmd에서 설정

4. Symbol 설정 및 모니터링 설정

symbol설정

여기까지 하면 이제 메모리가 새는지 모니터링을 할 준비가 되었습니다.

이제 메모리를 모니터링할 프로세스를 실행하고 작업관리자에서 해당 프로세스의 PID를 알아둡니다.

그리고 아래와 같이 시작파일을 남깁니다.

모니터링 시작

그리고 메모리 누수가 의심되는 동작을 한 후에 아래와 같이 종료파일을 남깁니다.

모니터링종료

마지막으로 결과파일을 추출합니다.

결과파일추출

5. 결과분석

이제 어느정도의 시간뒤에 결과추출에서 저장된 파일을 열어보면 알 수 없는 내용들이 쭈욱 기록되어 있습니다. 그러나 이 모든 내용을 신경쓸 필요는 없고, 내가 작성한 프로그램의 CallStack만 확인하면 됩니다.

결과분석

위 파일에서 하이라이트 된 부분을 보면 MFCTestDlg.cpp 의 165번째 줄에서 메모리를 할당한 것이 해제가 되지 않았다는 뜻입니다. 실제로 저 파일을 열어보면 아래와 같이 제가 임의로 테스트를 위해 작성한 코드에 문제가 있는 것을 확인할 수 있습니다.

실제 소스코드

6. 마치며

오늘은 gflags를 이용하여 메모리릭을 확인하는 방법을 기록해 보았습니다. c/c++, mfc 개발자 분들에게는 익숙한 툴일지도 모르지만 개인적으로 기록해 두고 다음에 엄청 시간이 지난뒤에 기억이 안날때 다시 열어보기 위해 기록하였습니다.

이 글을 읽으시는 분들 모두 오늘도 좋은 하루 되세요~~

반응형