2009-04-16 4 views
30

.map 파일의 용도/MAP 매개 변수 또는 "맵 파일 생성"프로젝트 설정을 사용할 때 VC++ 링커가 생성하는 항목은 무엇입니까? 언제 제가 그 (것)들을 필요로하고 그 (것)들에게서 나는 어떻게 유익합니까?링커가 생성하는 .map 파일의 용도는 무엇입니까?

+0

GNU Gas는'-a'로'.map' 파일을 생성합니다. –

답변

25

지도 파일을 사용하여 충돌을 찾는 방법에 대한 멋진 기사입니다. 수동으로이 모든 일을

http://www.codeproject.com/KB/debug/mapfile.aspx

은 매우 재미있다.

지도 파일을 읽을 수있는 도구를 알지 못하고 충돌 위치를 찾는 데 도움이됩니다. 아무도 우리를 업데이트하시기 바랍니다.

8

거의 필요하지 않지만 함수 및 데이터의 위치에 대한 정보를 제공하기 때문에 몇 가지 문제를 쉽게 디버깅 할 수 있습니다. 예를 들어

모든 세그먼트

  • 상세 정보 (코드, 데이터 등).
  • 링크 줄 번호는

당신은 디버깅 도구에 대한지도 파일을 사용할 수있는 코드입니다.

+0

프로세스의 디스 어셈블리를 열고 원시 주소를 검사하는 것과 같은 의미입니까? – sharptooth

+0

가능성이 있습니다. 내가 말했듯이, 당신은 그들을 거의 필요로하지 않습니다,하지만 당신이 그들을 필요로한다면, 당신은 그들이 기꺼이 사용할 수 있습니다. –

12

임베디드 시스템의 경우 맵 파일이 훨씬 유용합니다. (비록 Visual C++을 사용하지 않겠지 만)

프로그램/데이터 메모리가 어느 정도 떨어져 있는지와 특정 변수가있는 위치가 중요하다는 점이 중요합니다.

+0

목록 파일과 비슷한 UNIX 플랫폼에 어떤 것이 있습니까? 그렇다면 어떻게 생성합니까? – Shree

+0

잘 모르겠다. 컴파일러 설명서를 확인하십시오. –

8

WinDBG는 .hdmp 및 .mdmp 크래시 덤프를 분석 할 때 .map 및 .pdb 파일을 사용하여 충돌을 디버깅하는 데 도움을줍니다.

기본적으로 메모리 주소는 .exe (또는 .dll) 내의 함수 및 변수에 매핑됩니다. 일반적으로 매우 유용합니다.

편집 : "사실 이후"를 디버깅하는 가장 유용한 방법은 나를 위해 WinDbg를 사용하는 것입니다 (Windows 플랫폼). 열어서 크래시 덤프 열어. 그런 다음 코드 (있는 경우), .map 및 .pdb를 가리키는 심볼 경로 및 .exe 로의 이미지 경로를 가리 키도록 소스 경로를 설정하고 명령 줄에 "! analyze -v"를 입력하십시오 . 이제는 코드 라인과 모든 것을 포함한 전체 스택 트레이스를 갖게되었습니다.
경로에 MS 기호 서버가 있고 전체 페이지 힙이 켜져 있거나 adplus가 실행중인 경우 더 좋습니다. 내 두 좋아하는 WinDbg는 자원 참조 :
먼저 정지 :: http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx
강제 기호를 ::로드를 http://www.osronline.com/ShowThread.cfm?link=182377
유용한 사이트 :: 추적해야 할 때 http://www.dumpanalysis.org/blog/index.php/category/windbg-tips-and-tricks/page/7/

0

링커지도는 대형 프로젝트에 매우 유용 할 수 있습니다 컴파일 단위와 라이브러리 간의 종속성. 일반적으로 링커는 문제를 일으킨 심볼을보고하며, 흔히이 심볼 이름을 간단히 검색하면 아무런 결과도 반환되지 않거나 read과 같은 심볼에 대해 오탐 (false positive)이 반환됩니다.

링커 맵이 없으면 일반적으로 사용할 수있는 모든 소스 파일을 분석하고 (매크로가 사용 된 경우 사전 처리 통과 후 일반적으로 발생 함) 관련된 지점을 찾기를 바랍니다.

링커 맵에는 일반적으로 프로젝트의 다른 개체 파일에 필요한 개체 파일과 정확히 참조 된 기호를 알려주는 "파일/기호 별 참조"섹션이 있습니다.

로캘 지원없이 시스템에서 이식해야하는 프로젝트에서 한 번 작업했습니다. 링커가 "_localeconv_r에 대한 정의되지 않은 참조"오류를보고했는데 이는 소스를 검색하여 추적하는 데 어려움이있었습니다. 다행히도, -Map=output.map으로 생성 된 GCC 링커 맵 파일은 단일 검색으로 모든 문제 기능을 나타 냈습니다.

관련 문제