C++로 개발 중인 프로그램인데 다음과 같은 현상이 보입니다.
컴파일된 프로그램을 IDE 안에서 실행 -> 프로그램이 초기화 부분에서 데이터를 적재한 후 메인루프에 진입시 exception이뜸.
해당 프로젝트를 디버그 모드 설정후 실행->프로그램이 초기화 부분에서 데이터를 적재한 후 메인루프를 진입시 exception이 뜨지 않음.
프로그램을 IDE이 종료후 직접 클릭하여 실행 ->프로그램이 초기화 부분에서 데이터를 적재한 후 메인루프를 진입시 exception이 뜨지 않음.
특히 이상한 점이 백그라운드에 웹브라우져라도 띄워놓으면 exception이 잘 뜹니다.
(마치 CPU타임이 부족하면 exception이 뜨는 것 같습니다.)
그러다가 또 어떤 경우에는 안뜨는 현상이 반복됩니다.
debug 모드에서 debug symbol을 생성하게 해 놓았는 데 이런 call stack에서 심볼을 볼 수가 없네요.
개발환경: OS- XP, 컴파일러- GCC, IDE- code::blocks입니다.
Debugger Message(다음이 오류메시지의 전부입니다.)
Program received signal SIGSEGV, Segmentation fault.
In ?? () ()
Call Stack(다음이 콜스택의 출력의 전부입니다.)
Nr Address Function
#0 00000000 0x00417760 in ??() (??:??)
#1 00000000 0x00000000 in ??() (??:??)
[질문] 제가 exception 에 대해서 잘 몰라서 그러는 데 왜 같은 프로그램에서 exception이 떳다가 안 떳다가 달라지는 지 알 수 없을까요?
PS.제가 현재 할 수 있는 일이라곤 1. wikipedia 찾아보는 것 2. Debugging Application책을 읽어보는 것 밖에 생각이 안나네요.
특별히 쓰레드가 복잡하게 꼬이는 어플이 아닌이상 예외가 불특정하게 발생하는 이유는 100이면 100 memory overrun 입니다.
동적할당이나 해제 강제 타입캐스팅 등을 하나하나 살펴보심을 추천드립니다.
wikipedia에서는
SIGSEGV
is the signal sent to a process when it makes an invalid memory reference, orsegmentation fault.이라고 나오는데요 인자 넘겨주는 부분이나 메모리 접근하는 부분에 예외처리 추가하셔서 점검해보시면 문제를 파악할 수 있지 않을까요?