core dump 몇가지 질문..

peccavi의 이미지

안녕하세요...

코어 파일에 대한 몇가지 질문이 있습니다.

코어 파일의 크기는 어느정도로 잡아야 하나요?

무작정 unlimited로 설정해 놓으면 파일 크기가 너무 커지는것 같습니다.

적당한 크기를 계산하는 방법이라도 있는건지요..

그리고 또하나,

생성된 코어파일들로 디버깅을 해보면 항상 다음과 같은 결과가 나옵니다.

Quote:
[tester@sun bin]$ gdb -c core.11197 speaker
GNU gdb Red Hat Linux (6.0post-0.20040223.19rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

Core was generated by `./speaker'.
Program terminated with signal 6, Aborted.

warning: svr4_current_sos: Can't read pathname for load map: 입력/출력 오류

Error while mapping shared library sections:
: 성공.
Reading symbols from /etc/libcwait.so...done.
Loaded symbols for /etc/libcwait.so
Error while reading shared library symbols:
: 그런 파일이나 디렉토리가 없음.
Reading symbols from /lib/i686/libpthread.so.0...done.
Loaded symbols for /lib/i686/libpthread.so.0
Reading symbols from /home/oracle/oracle/product/9.2.0/lib/libclntsh.so.9.0...done.
Loaded symbols for /home/oracle/oracle/product/9.2.0/lib/libclntsh.so.9.0
Reading symbols from /usr/lib/libEncryptGeneralData.so.0...done.
Loaded symbols for /usr/lib/libEncryptGeneralData.so.0
Reading symbols from /usr/lib/libDecryptGeneralData.so.0...done.
Loaded symbols for /usr/lib/libDecryptGeneralData.so.0
Reading symbols from /usr/local/lib/libmyoracle.so.0...done.
Loaded symbols for /usr/local/lib/libmyoracle.so.0
Reading symbols from /usr/lib/libstdc++.so.5...done.
Loaded symbols for /usr/lib/libstdc++.so.5
Reading symbols from /lib/i686/libm.so.6...done.
Loaded symbols for /lib/i686/libm.so.6
Reading symbols from /lib/libgcc_s.so.1...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/i686/libc.so.6...done.
Loaded symbols for /lib/i686/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /home/oracle/oracle/product/9.2.0/lib/libwtc9.so...done.
Loaded symbols for /home/oracle/oracle/product/9.2.0/lib/libwtc9.so
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/libnsl.so.1...done.
Loaded symbols for /lib/libnsl.so.1
#0 0x001840c1 in kill () from /lib/i686/libc.so.6
(gdb) bt
#0 0x001840c1 in kill () from /lib/i686/libc.so.6
#1 0x008dd2b1 in pthread_kill () from /lib/i686/libpthread.so.0
#2 0x008dd62b in raise () from /lib/i686/libpthread.so.0
#3 0x00183d54 in raise () from /lib/i686/libc.so.6
#4 0x001854b8 in abort () from /lib/i686/libc.so.6
#5 0x08050246 in CoreDump () at co_core.cpp:718
#6 0x0804f73a in SignalHandler (signum=11) at co_core.cpp:412
#7 0x008dfe56 in __pthread_sighandler () from /lib/i686/libpthread.so.0
#8 0x00871420 in ?? ()
#9 0x0000000b in ?? ()
#10 0x00000033 in ?? ()
#11 0x00000000 in ?? ()
(gdb)

frame 8 이후의 정보들이 중요할것 같은데 정작 어느 부분에서 죽었는지 안나오네요.. 이렇게 나오는 이유도 설명좀 부탁드리겠습니다.

pynoos의 이미지

SIGSEGV 에 대한 signal handler를 등록하여 core를 내기전에 뭔가 조치(로그를 남기는등)를 취하는 코드가 있는 것 같군요.

그런데 SEG Violation이 발생하는 순간 stack을 말아 먹어서 8번 이하의 정보가 없는 것입니다.

stack overflow가 일어날만한 일이 있는 것 같습니다.

peccavi의 이미지

말씀하신대로 시그널 핸들러에서 SIGSEGV를 받으면 setrlimit() 함수로 코어 크기를 강제로 변경해 주는 코드가 있습니다. 이 코드 이후에 바로 abort()를 해주고요..

이것때문에 stack 정보가 없어지는건가요..?

stack overflow에 대해 찾아봐야겠네요.. ^^

답변 감사드립니다.

----
jai guru deva om...

saxboy의 이미지

아마 setrlimit() 같은 것때문에 스택프레임들이 사라진 것은 아닐겁니다. automatic variable이 너무 크면, 스택부분을 덮어쓰겠지요. 대부분 로직상으로 strncpy( arr, str, 1000000000 ) 과 같은 류의 코드입니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.