세그먼트폴트, make new 하니 사라지다?

lacovnk의 이미지

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:

saxboy의 이미지

이런 경우는 주로 오브젝트의 디펜던시가 헤더에 제대로 걸려있지 않아서, make를 했을때 새로 빌드할 타겟이 덜 선택되는 경우에 많이 발생하더군요.

struct 가 변경되었다거나 했을 경우 파일 1은 변경된 상태로 오브젝트가 생기고 파일 2는 기존 상태의 오브젝트로 링크되면 자주 발생합니다.

lacovnk 님의 경우는 어떤지 모르겠지만, 아마도 clean 해서 새로 make를 했는데 문제가 해결되었다면 대부분 헤더의 디펜던시 때문입니다.

voider의 이미지

저도 이런 경우가 있었는데 이런 황당한 경우를 도데체 어떻게 해야 할지 모르겠습니다. 상태가 이상할때 무조건 클린 시키고 다시 리빌드 할수도 없는일이구....
툴이 신뢰성을 잃게 되면 참으로 난감해집니다.

-- 아쉬운 하루 되세요 --

ssehoony의 이미지

헤더를 보고 의존성을 검사하여 컴파일 할 수 있습니다.
제가 그러한 예제 makefile 을 올린게 있습니다.

http://bbs.kldp.org/viewtopic.php?t=42820

saxboy의 이미지

voider wrote:
저도 이런 경우가 있었는데 이런 황당한 경우를 도데체 어떻게 해야 할지 모르겠습니다. 상태가 이상할때 무조건 클린 시키고 다시 리빌드 할수도 없는일이구....
툴이 신뢰성을 잃게 되면 참으로 난감해집니다.

툴이 신뢰성을 잃은 경우라기보다는 툴을 제대로 이해하지 못하고 사용하는 경우에 이런 문제가 자주 발생합니다. 흔히 툴 and/or 컴파일러/링커/OS 따위를 의심하는 경우가 종종 발생하는데, 나중에 알고보면 99%는 사용자의 잘못인 경우가 많습니다. 이런 문제는 참 많이도 겪었지만, 저는 바로 어제에도 똑같은 오판을 해버렸답니다. 사용하고 있던 후지쯔 개발툴을 탓했는데, 결국 제 잘못이더군요.

IsExist의 이미지

Makefile 파일 작성이 헤더 디펜던시를 무시하고 작성하는 경우를
종종 봅니다. 귀찮더라도 일일이 달아 주거나 툴을 사용해 해주는것도
괜찮습니다.

gcc 옵션중에 -M 옵션이 유용합니다.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.