반응형

Segmentation fault (core dumped)


나오면서 죽는 경우가 있다. 이럴때는


ulimit -c 50000 


이렇게 core dump 파일이 생길 수 있도록 환경 설정을 해주고 (50000byte 짜리 core dump file 이 생긴다)


프로그램을 다시 돌리면 core 라는 파일이 생긴것을 볼 수 있다.


이걸 가지고 gdb로 디버깅을 걸 수 있다. 


프로그램을 gcc로 컴파일 할 때 -g 옵션을 줘서 컴파일 하면 gdb 돌릴때 좋다.


gdb -c=core ./tutorial01


이렇게 하면 gdb로 문제가 생긴 부분을 볼 수 있다.


gdb로 들어가서 


(gdb) bt


라고 bt 를 치면 back trace 해서 죽은 위치가 나온다.


------------------------------------------------------------------------------------------------------------------------------------------------------

coredump 경로를 변경하고 싶으면 


sudo echo "/home/lionelj/log/core" | sudo tee /proc/sys/kernel/core_pattern


이렇게 하면 코어덤프 파일 경로를 변경 할 수 있다.

------------------------------------------------------------------------------------------------------------------------------------------------------

core dump file 이 안생기게 하려면 다시 

ulimit -c 0 하면 되고


무제한으로 크게 core dump 파일을 생성하려면 

ulimit -c unlimited


라고 써준다.

------------------------------------------------------------------------------------------------------------------------------------------------------


gdb 관련 추가


gdb) up   //스택 이동

#1  0x0005fa50 in t_z47_completion_p1 ()


(gdb) up

#2  0x0003dcb0 in rpc_t_z47_completion_p1 ()


(gdb) down

#1  0x0005fa50 in t_z47_completion_p1 ()


(gdb) disassemble

Dump of assembler code for function t_z47_completion_p1:

0x5e058 <t_z47_completion_p1>:  save  %sp, -472, %sp

0x5e05c <t_z47_completion_p1+4>:        st  %i5, [ %fp + 0x58 ]

0x5e060 <t_z47_completion_p1+8>:        st  %i4, [ %fp + 0x54 ]

0x5e064 <t_z47_completion_p1+12>:       st  %i3, [ %fp + 0x50 ]

0x5e068 <t_z47_completion_p1+16>:       st  %i2, [ %fp + 0x4c ]

0x5e06c <t_z47_completion_p1+20>:       st  %i1, [ %fp + 0x48 ]

0x5e070 <t_z47_completion_p1+24>:       st  %i0, [ %fp + 0x44 ]

0x5e074 <t_z47_completion_p1+28>:       clr  %l0

0x5e078 <t_z47_completion_p1+32>:       st  %l0, [ %fp + -136 ]

0x5e07c <t_z47_completion_p1+36>:       mov  0x50, %l0

0x5e080 <t_z47_completion_p1+40>:       mov  %l0, %o0

0x5e084 <t_z47_completion_p1+44>:       call  0x24cfc0 <dce_malloc>

0x5e088 <t_z47_completion_p1+48>:       nop

0x5e08c <t_z47_completion_p1+52>:       mov  %o0, %l1

0x5e090 <t_z47_completion_p1+56>:       ld  [ %fp + 0x90 ], %l0

0x5e094 <t_z47_completion_p1+60>:       st  %l1, [ %l0 ]

--중간생략---

0x5fa1c <t_z47_completion_p1+6596>:     call  0x24d7e8 <dce_free>

0x5fa20 <t_z47_completion_p1+6600>:     nop//이 영역에 오류를 유발한코드가 있을가능성있음.

0x5fa24 <t_z47_completion_p1+6604>:     ld  [ %fp + 0x90 ], %l0

0x5fa28 <t_z47_completion_p1+6608>:     ld  [ %l0 ], %l0

0x5fa2c <t_z47_completion_p1+6612>:     sethi  %hi(0x267400), %l1

0x5fa30 <t_z47_completion_p1+6616>:     or  %l1, 0x254, %l1     ! 0x267654 <lcmetbl+6160>

0x5fa34 <t_z47_completion_p1+6620>:     sethi  %hi(0x1800), %l2

0x5fa38 <t_z47_completion_p1+6624>:     or  %l2, 0x358, %l2     ! 0x1b58

0x5fa3c <t_z47_completion_p1+6628>:     mov  %l0, %o0

0x5fa40 <t_z47_completion_p1+6632>:     mov  %l1, %o1

0x5fa44 <t_z47_completion_p1+6636>:     mov  %l2, %o2

0x5fa48 <t_z47_completion_p1+6640>:     call  0x28bc68 <sprintf>

0x5fa4c <t_z47_completion_p1+6644>:     nop

0x5fa50 <t_z47_completion_p1+6648>:     call  0x5c690 <commit_work>

반응형
Posted by Real_G