NLP/AI/Statistics

gdb - segmentation fault (core dumped) debugging 본문

Computer Setting/Error

gdb - segmentation fault (core dumped) debugging

Danbi Cho 2021. 6. 7. 19:20

python에서 작업하는 도중에 segmentation fault (core dumped) 문제가 발생했다.

 

이는 대부분 C에서 발생하는 문제라고 하는데, python에서도 종종 발생한다고 한다. 

 

segmentation fault는 스크립트에서 어디가 문제인지조차 알려주지 않기 때문에

 

debug를 통해 어디가 문제인지 확인하는 것이 중요하다. 

 

gdb라는 것을 사용하여 segmentation fault의 오류 발생 시점이 어디인지 알 수 있다. 

 

#. 실행시키고자 하는 python파일 이름을 text.py라고 가정한다. 

 

$ mkdir -p ~/.config/gdb
$ cd ~/.config/gdb

$ wget https://hg.python.org/cpython/rawfile/3.6/Tools/gdb/libpython.py

현재 python 3.6 버전을 사용하기 때문에 위 코드의 세번째 줄과 같이 설치하였다. 

( 버전에 맞게 중간의 숫자를 변경해주면 된다.)

 

이렇게 libpython.py를 설치한 이후에 gdbinit을 생성한다. 

 

$ vim ~/.gdbinit
python
import gdb
import sys
import os
sys.path.insert(0, os.path.expanduser("~/.config/gdb"))

def setup_python(event):
	import libpython
gdb.events.new_objfile.connect(setup_python)
end

gdbinit 파일을 생성하여 위와 같이 작성해준 후 저장한다. 

 

이후 아래와 같이 gdb를 실행시킨다. 

 

$ gdb --args python test.py

(위에서 언급한 바와 같이 test.py는 실행하고자 하는 파일 명이다.)

 

위와 같이 gdb를 실행시키면 아래와 같이 terminal이 (gdb)로 시작하는 형태로 변경되고 run을 하여 확인한다. 

 

(gdb) run

 

실행 후 위의 사진과 같이 실행 파일에 대한 debugging이 시작되어 마지막엔 어떤 부분이 에러인지 확인할 수 있다.

Comments