Tip2010. 8. 20. 18:47

디버깅을 하다보면 Access Violation이 가끔 일어나곤 하는데,

디버깅을 종료하지 않고 벗어나는 방법이 있다.

Line1] Player* pPlayer = GetPlayerMgr()->GetPlayer( Id );
Line2] pPlayer->GetOwnPlayer();

만약 Line1에서 pPlayerNULL이라면 Line2에서는…

이렇게 First Chance Exception 경고창이 뜨게 된다.



디스어셈블리창으로 보면 (0 + 0E78h)주소에 접근하기 때문임을 알 수 있다

접근을 하지 않고, 이 함수를 호출하기 전으로 돌아가면 Access Violation을 피할 수 있다.

그럼 어떻게 호출전으로 돌아갈까?


아래 빨간 박스는 모든 함수마다 존재하는 구문이다. (노란화살표 바로 아래 부분: 016A75F5~016A75FB)

콜스택을 초기화 하고, 각종 레지스터를 함수 호출 전의 상태로 돌린다.

Instruction Pointer를 변경하면 문제끝!!



IP를 바꾸는 것은 Menu>Debug>Windows>Registers에서 쉽게 변경 가능하다.



IP를 바꾸는 더 쉬운 방법은...

마우스 우클릭>Go To Disassembly> Set Next Statement

'Tip' 카테고리의 다른 글

Set a Thread Name in Native Code  (0) 2010.12.03
Remote Debugging  (0) 2010.11.23
IsNaN  (0) 2010.11.02
Failed to create .NET Frameworks PropertyGrid component  (0) 2010.08.20
코딩 도우미 Visual Basic Macro  (0) 2009.10.13
Posted by codevania