Programming/Delphi

Access violation 난 곳 찾기

통통만두 2010. 6. 30. 15:37
반응형

<델파이 7 기준 - Access Violation Error 가 발생했을 때 메모리 주소값으로 에러난 라인 찾기.>

Project - Options 로 들어간다.

Linker - Map File - Detailed 를 선택 후 "OK" 버튼을 누른다.

그럼 프로젝트가 저장되는 폴더에 프로젝트 이름.map 파일이 생성된다.

 

<그림 1 - 소스코드>

 


<그림 2 - 에러메세지>

 

<그림 3 - map 파일 맨 밑부분>

 

에러난 주소 $00456415에서 HIntance인 $00400000을 뺀다.
그리도 PE포맷의 헤더등 불필요한 앞부분 사이즈인 $1000 도 뺀다.
그러면 $00055415가 된다.

그러면 map파일에서 $00055415를 찾아보면 33line 0001번째 문자에서 에러가 났다는 것을 알 수 있다.

XP, 2000에서는 HInstance는 항상 $00400000이고 델파이로 만들어진 EXE의 PE헤더정보는 항상 $1000 바이트이다.

그러므로 에러가 난 주소 = 에러화면에 나온주소 - $00410000 하면 된다.

프로그램을 배포하기 전에 맵파일을 만들어 두어야 한다.
혹시 안만들고 배포하더라고 나중에 만들면 되긴 하지만, 소스코드가 최종 컴파일 됐을 때 그대로 있어야 한다.
맵에 라인별 주소값은 컴파일 할 당시 실제로 컴파일한 유닛들만 나온다.


반응형