출처 : http://skmagic.tistory.com/entry/%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A6%AD-%EC%B0%BE%EA%B8%B0Visual-Leak-Detector
----------------------------------------------------------------------------------------------------

1.메모리릭(memory leak) == 메모리 누수


초기화되어있지 않고 사용되지 않는 메모리


즉 메모리가 새는 현상. 메모리가 낭비되는 현상을 말합니다.

 

프로그래머가 메모리 할당을 해둔채 해지를 하지않을경우 발생을하게됩니다.

 

이러한 메모리 조각들은 ram의 영역을 차지하게되어 시스템의 전반적인 성능을 감소 시킵니다.

 

메모리가 새는 현상. 메모리가 낭비되는 현상을 말합니다.

 

메모리는 한정적인데 프로그램적인 실수로 어떤 동작을 할때 메모리가 낭비가 된다면,

 

그리고 그 동작이 반복된다면 나중에는 성능적인 손실이 오겠죠.





2.비쥬얼 2008에서 메모리릭 검출하는법


프로그램개발을 시작할때, 메모리릭을 검출할수있는
상태로 만들어 두는것이 좋다.
그중 여기에서는 Visual Leak Detector를 사용한다.
무료이고, VS2008에서 WinApi나 MFC환경에서
잘동작한다.
XP32환경에서는 1.9h(Beta), 1.0은 잘동작했지만,
Vista64환경에서는 1.0만 잘동작하였다.
XP32환경이라면, 1.9h를 권한다.




#XP32비트 사용자
1. 1.9h 다운로드
2. 1.9h 설치
3. 1.9h 라이브러리 등록

#XP32비트, Vista64비트등 모든 사용자
4. 1.0 다운로드
5. 1.0 압축풀기
6. 1.0 라이브러리 등록

#공통
7. 영문경로로 옮기기
8. 코드에 포함시키기
9. 메모리릭 찾기

10. 현실적인 제안








#XP32비트 사용자

1. 1.9h 다운로드
http://dmoulding.googlepages.com/vld-1.9h-setup.exe



2. 1.9h 설치
Next, Next, Next



3. 1.9h 라이브러리 등록
도구:옵션프로젝트 및 솔루션:VC++ 디렉터리:다음 파일의 디렉터리 표시

포함파일에 C:\Program Files\Visual Leak Detector\include
라이브러리 파일에 C:\Program Files\Visual Leak Detector\lib
를 등록하고 확인을 누른다.



#XP32비트, Vista64비트등 모든 사용자

4. 1.0 다운로드
http://dmoulding.googlepages.com/vld-10.zip



5. 1.0 압축풀기
C:\Program Files\Visual Leak Detector에 압축을 푼다.



6. 1.0 라이브러리 등록
도구:옵션프로젝트 및 솔루션:VC++ 디렉터리:다음 파일의 디렉터리 표시

포함파일에 C:\Program Files\Visual Leak Detector
라이브러리 파일에 C:\Program Files\Visual Leak Detector
를 등록하고 확인을 누른다.


#공통

7. 영문경로로 옮기기
프로그램소스경로에 한글이 포함되어있으면, 
메모리릭이 난 파일을 표시하지 못한다.
경로를 영문으로 수정하던지, 옮긴다.



8. 코드에 포함시키기
stdafx.h파일의 가장 하단에 #include "vld.h"를 넣는다.
다른것을 추가시키더라도, #include "vld.h"위에 위에 놓아야 한다.




9. 메모리릭 찾기
F5를 누르고, 프로그램을 종료하면, 출력창에 메모리릭을 보여준다.
그것을 클릭하면, 메모리릭이 발생한 지점으로 이동해준다.
그리고, 정상적으로 해제해주는 코드를 넣는다.
만약, 메모리릭이 일어났다고 나오지만, 릭이 일어난지점을
표시해주지 못할경우 dbghelp.dll파일을 디버그의 실행파일이 있는곳에 둔다.




10. 현실적인 제안
Visual Leak Detector를 사용하면 디버그모드가 많이 느려진다.
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
사용시에는, 이것만 켜놓고, 메모리릭발생이 뜨면, 그때 Visual Leak Detector를 활성화한다.
저작자 표시 비영리 변경 금지
Posted by Kevin Dominic
출처 : http://proline1.cafe24.com/zeroboard/view.php?id=data&page=1&sn1=&divpage=1&category=4&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=166&PHPSESSID=bc40cf8c7ae822b43794d6bb6d213cd3
----------------------------------------------------------------------------------------------------

안녕하세요 볼따구 입니다.

인터넷에서 좋은 정보 찾아서 올립니다.

DirectX의 경우에는 COM기반의 프로그래밍 언어인데 인터페이스를 얻어온 후 Release를 하지 않았거나 혹은 AddRef()로 늘어난 래퍼런스 카운터에 맞게 Release()가 호출이 되지 않았다면 릭이 발생할 수 있다.

간혹 이런 경우 위의 함수들이 메모리릭을 일으킨 정확한 시점을 감지하지 못하는 경우가 생긴다. 그 때에는 D3DX에서 출력창에 띄워준 정보를 바탕으로 메모리릭을 찾을 수 있다.


D3DX: MEMORY LEAKS DETECTED: 3 allocations unfreed (708 bytes)
D3DX: Set HKLM\Software\Microsoft\Direct3D\D3DXBreakOnAllocId=0x21b to debug



위에서 봤던 출력창 메시지의 제일 마지막 2줄이다.

아래와 같은 순서로 메모리릭을 일으킨 인터페이스가 생성되는 시점을 찾을 수 있다.


1. 시작프로그램의 실행에서 REGEDIT를 실행해서 레지스트리 편집기를 실행하자.

2. HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> Direct3D 의 위치로 이동

   ( 설명된 위치 이외의 키들을 건드릴 경우 시스템에 치명적인 손상을 줄 수 있음 )

3. D3DXBreakOnAllocId 라는 키가 존재하는 지 확인 하고 없을 경우에는

   새로만들기 -> DWORD값 으로 새 키를 만들어 주고 이름을 위와 같이 설정 해 주자.

   ( 비슷한 이름의 키가 존재할 수 있으니 이름이 정확히 맞는지 확인할 것 ! )

4. 값에 16진수로 0x21b값을 적어주자.

   ( 이 값은 출력창에 표시된 위의 값이다. 0x는 빼고 적어주자. )

5. 이제 디버그 모드로 실행을 시키면 메모리릭을 일으킨 범인이 할당되는 순간

   브레이크 포인트를 걸고 제어권을 사용자에게 넘겨준다.

저작자 표시 비영리 변경 금지
Posted by Kevin Dominic
http://www.gpgstudy.com/forum/viewtopic.php?p=36555
http://meat.tistory.com/tag/3dsmax%20exporter
저작자 표시 비영리 변경 금지
Posted by Kevin Dominic

Remote Debugging

Study/전공 2011/07/29 12:46

http://codevania.tistory.com/entry/Remote-Debugging
저작자 표시 비영리 변경 금지
Posted by Kevin Dominic
http://alones.kr/tag/c4251
저작자 표시 비영리 변경 금지

'Study > 전공' 카테고리의 다른 글

IGameExporter에서 Mesh 추출 시 유의사항  (0) 2011/08/16
Remote Debugging  (0) 2011/07/29
DLL에서 stl을 export할 수 있는 방법  (0) 2011/07/23
Win32에서 dos용 프로그램을 Prompt없이 실행하는 법  (0) 2011/06/24
3dsmax Plugin wizard vs.net 2003  (0) 2011/05/11
wxPack  (0) 2011/03/20
Posted by Kevin Dominic