윈도우즈 프로그램이 아래와 같이 알수없는 런타임 에러를 내는 경우,

Visual Studio 에서 생성해 주는 map 파일을 활용하여 디버그를 할 수 있다.

원본 출처 : http://www.codeproject.com/KB/debug/mapfile.aspx

사용법 간단정리 :

--------------------------------------------------------------------------------------

1. setting - C/C++ tab : Line Numbers Only 로 설정  ( Visual Studio 2005 이상 버전에서는 삭제)

2. setting - Link tab : Generate map file 체크

3. setting - Link tab : Project options 란에 /MAPINFO:LINES /MAPINFO:EXPORTS 추가

--------------------------------------------------------------------------------------


1. 먼저 map 파일 안에서 함수 위치를 찾는다. : 문제가 발생한 주소를 포함한 함수를 찾음.

2. 라인을 찾기 위해 crash address - load adress - 0x1000 = offset 으로 offset을 구한다. : 0x1000 은 PE header 정보크기이다.

3. offset으로 라인을 찾는다. : 2에서 구한 offset 값으로 라인을 찾으면 OK.


결론은 릴리즈시 바이너리생성과 동시에 map파일 생성하고, 릴리즈 바이너리처럼 관리해서 문제 발생시,


문제부분을 정확히 알아내자.... 정도.


문제는 외부 라이브러리등의 링크시 확인이 불가능하다...



AND