세그먼트폴트, make new 하니 사라지다?
글쓴이: lacovnk / 작성시간: 금, 2005/09/30 - 8:24오후
all: db ctags *.* db: lacodb.o db.o $(CXX) -Wall -W -ldb_cxx-4 -o db db.o lacodb.o db.o: db.cpp lacodb.hpp $(CXX) -Wall -W -c db.cpp lacodb.o: lacodb.cpp lacodb.hpp $(CXX) -Wall -W -c lacodb.cpp clean: rm db db.o lacodb.o lacovnk.db tags -rf new: $(clean) touch db.cpp make
이리저리 수정하다가.. test 돌려보니 갑자기 seg 폴트가!! -o-
패닉 빠져서 svn diff 하는데 도통 이유가 보이지 않고..
lacodb.cpp에서 exception 처리 부분을 추가하고 컴파일해도 사라지지 않고..
그리고 세그 폴트가 참 신기한게, 종료할때 발생하는 겁니다;
그러다가, 혹시나 해서 make new 하니 단번에 사라지네요 -o-
어떤 경우가 있을까요? 최근에 한 작업으로는.. 음음 -o- void 리턴하던걸 bool 리턴하게 만들고, vector 부분을 map으로 다르게 구현한 것이었는데, gcc -Wall -W 에 전혀 메시지가 나오지 않았었거든요.
해결되서 다행입니다만.. 궁금해져버렸어요~ :twisted:
Forums:
이런 경우는 주로 오브젝트의 디펜던시가 헤더에 제대로 걸려있지 않아서,
이런 경우는 주로 오브젝트의 디펜던시가 헤더에 제대로 걸려있지 않아서, make를 했을때 새로 빌드할 타겟이 덜 선택되는 경우에 많이 발생하더군요.
struct 가 변경되었다거나 했을 경우 파일 1은 변경된 상태로 오브젝트가 생기고 파일 2는 기존 상태의 오브젝트로 링크되면 자주 발생합니다.
lacovnk 님의 경우는 어떤지 모르겠지만, 아마도 clean 해서 새로 make를 했는데 문제가 해결되었다면 대부분 헤더의 디펜던시 때문입니다.
저도 이런 경우가 있었는데 이런 황당한 경우를 도데체 어떻게 해야 할지
저도 이런 경우가 있었는데 이런 황당한 경우를 도데체 어떻게 해야 할지 모르겠습니다. 상태가 이상할때 무조건 클린 시키고 다시 리빌드 할수도 없는일이구....
툴이 신뢰성을 잃게 되면 참으로 난감해집니다.
-- 아쉬운 하루 되세요 --
헤더를 보고 의존성을 검사하여 컴파일 할 수 있습니다.제가 그러한 예
헤더를 보고 의존성을 검사하여 컴파일 할 수 있습니다.
제가 그러한 예제 makefile 을 올린게 있습니다.
http://bbs.kldp.org/viewtopic.php?t=42820
[quote="voider"]저도 이런 경우가 있었는데 이런 황당한 경우
툴이 신뢰성을 잃은 경우라기보다는 툴을 제대로 이해하지 못하고 사용하는 경우에 이런 문제가 자주 발생합니다. 흔히 툴 and/or 컴파일러/링커/OS 따위를 의심하는 경우가 종종 발생하는데, 나중에 알고보면 99%는 사용자의 잘못인 경우가 많습니다. 이런 문제는 참 많이도 겪었지만, 저는 바로 어제에도 똑같은 오판을 해버렸답니다. 사용하고 있던 후지쯔 개발툴을 탓했는데, 결국 제 잘못이더군요.
Makefile 파일 작성이 헤더 디펜던시를 무시하고 작성하는 경우를
Makefile 파일 작성이 헤더 디펜던시를 무시하고 작성하는 경우를
종종 봅니다. 귀찮더라도 일일이 달아 주거나 툴을 사용해 해주는것도
괜찮습니다.
gcc 옵션중에 -M 옵션이 유용합니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
댓글 달기