2013. 8. 1. 10:30

Allocating and freeing memory across module boundaries

memory across module boundaries issue

http://blogs.msdn.com/b/oldnewthing/archive/2006/09/15/755966.aspx

DybObj - plugIn Objects( relate memory across module boundaries issue )

http://www.codeproject.com/Articles/20648/DynObj-C-Cross-Platform-Plugin-Objects

Binary-compatible c++ interface

http://chadaustin.me/cppinterface.html

2013. 1. 8. 17:54

problem of memory leak detect( malloc )

http://www.nynaeve.net/?p=209

위 내용 처럼 malloc 은 특정 버젼의 Windows OS에서는 FPO(frame pointer omission) 이 되어 있어서 해당 memory leak 에 대한 call stack 을 얻기가 어려운 점 이 있다.


http://support.microsoft.com/kb/268343/en-us

위 url 에서 windows 2003 sp 이후 부터 malloc의 FPO를 사용하지 않는다고 명시 되어 있다.

2011. 3. 30. 13:24

debug diagnostic

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&displaylang=en

위 링크에서 download 받을 수 있다.

골치 아픈 memory leak 문제가 있었는데, 여러가지 tool 을 사용해 보았다.
하지만 딱히 hint 를 얻지 못한 상태에서 위 tool을 사용하였는데 해결의 실마리를 얻었다.

비단 memory leak 뿐 아니라 postmortem 
 debugging 등 다양한 기능을 제공한다.

detect memory leak 

Leakdiag 와 비교 시 장점은  Report 하는 데이터가 많으며 속도가 빠르다. 특히 LeakDiag는 symbol을 callstack에 매칭하는 작업이 엄청 시간이 걸리는데 반해 이 tool은 그다지 시간 소요가 없다.

  1. 해당 process 선택 하고 context menu 에서 Monitor For Leaks를 선택한다.( 특정 dll을 해당 process로 inject 을 한다.)

     
 2. memory leak 일 발생되는 동작을 반복한다.
 3. 작업이 완료 되면 해당 process를 선택하고 context menu 에서 Create Fumm Userdump 를 선택하여 dump 파일을 생성한다. 
 4. symbol 위치를 설정한다.  Tools -> Options And Settings... (기본적으로 ms symbol 은 설정되는 것 같다. 해당 software의 symbol을 Symbol Search Path For Analysis 에 추가하면 된다.

  5. Advanced Analysis Tab 으로 이동한다.  
Available Analysis Scripts 에서 Memory Pressure Analyzers 를 선택한다.
하단의 Add Data Files 버튼을 클릭하여 아까 생성한 dump 파일을 선택한다.
Start Analysis 버튼을 클릭하면 결과 보고서가 생성된다.