|
Access Violation 이야 워낙 많이 올라오는 질문이겠거니 하고,
search해서 관련글도 읽고 했습니다만 해결방법이 안 보여서 글 올립니다.
프로그램을 빌드하면 No Error 인데,
Debugging을 위해 브레이크 잡아놓고 Run 명령을 주면 Access Violation이 걸립니다.
CPU Window를 보니 프로그램이 시작하는 최초부분에서 멈춰있더라구요.
Call Stack 을 해서 보면.
c:\Windows\System\Kernel32.dll 이 두 번 호출되고
"Mtx"라는 게 호출된 상태에서 멈춰있습니다.
(때로는 Qtrctrl 이라는 이름으로 있을때도 있습니다.)
첨엔 잘 몰라서 Source의 어느부분인지 알아볼려고 CPU Window 에서
Scroll Bar 내려가면서 확인했더니...
Program의 제일 시작부분인 것 같더라구요.
멈춰있는 윗부분의 어셈블리는 전부
"add [eax], al"
이었거든요.
프로그램이 멈춘 아래쪽으로 천천히 내려보면 처음에
Sysinit::_linkproc__ GetTls:
라고 나오면서, 어셈블리가 마구 써 있고, 더 내리면
Windows::Finalization:
Windows::initialization:
이 나오더군요. 그 밑으로는 계속해서 위의 것과 비슷하게 반복되는데
앞의 Windows에 해당하는 부분만
Messages, Commctrl, Shellapi, Regstr, Wininet, Urlmon, Shlobj, Commdlg, Dlgs, Imm,
Richedit, Winspool 로 바뀌면서 반복되고 있었습니다.
그리고 조금 더 내려가니 결국에는...
프로그램.cpp 39 :: WINAPI WinMain(...)
하면서 프로그램의 Source 가 보이더군요.
이러면 도대체 어디서 Access Violation이 난 걸로 봐야 돼나요?
소스에 들어가기도 전이니...
어디를 봐야 할지 감이 안 잡힙니다.
벌써 이틀째인데, 가만히 보고 있는 수밖에 없으니 답답하네요.
참...이상한 점이 하나 있는데.
코드를 수정하고 나서 처음 Run할 때만 위의 Access Violation 이 발생합니다.
Ctrl+F2 로 중지하고 다시 Run하면 Access Violation없이 실행됩니다.
그 이후에 코드를 수정하지 않으면 몇 번이고 그냥 되다가,
다시 코드 수정후 Run하면 Error가 나는거죠.
여러번 반복되면 파란 화면이나 재부팅되거나 뻗어버립니다.
Error 창에는 VCLIDE50.BPL 에서 Error 가 났다고 나오네요.
Code Guard나 Numega의 BoundsChecker에도 안 걸립니다.
도대체 어찌 된건지...
후유~
|