본문 바로가기

IT/python

python 디버깅

Ubuntu 20.04

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=zdr55&logNo=222003486778

 

Ulimit -a

 

1. 코어덤프 파일 크기 

/etc/security/limits.conf

*               soft    core            unlimited

*               hard    core            unlimited

 

대상 프로그램을 서비스로 실행하면 서비스 description에 아래 항목 추가

[Service]

LimitCORE=infinity 

 

2. 경로

/etc/sysctl.conf

kernel.core_pattern = /원하는/절대/경로/%h-%e-%t-%p.core

 

pport 데몬 비활성화 (비활성화 안하면 시스템 reboot 시 설정값이 초기화 됨)

sudo systemctl stop apport.service

sudo /lib/systemd/systemd-sysv-install disable apport

 

 

설정 적용하기

sudo sysctl -p

 

 

확인하기

cat /proc/sys/kernel/core_pattern

 

 

3. 코어덤프 생성 테스트 (프로세스 강제종료)

ps -ef | grep {PROCESS_NAME}

sudo kill -s SIGSEGV {PID_NUM}

 

sudo apt-get install python3.8-dbg

 

gdb python3 /var/crash/kay-python3-1630632231-1431.core

(Gdb) py-bt <------- 이게 끝판왕

(Gdb) py-list

 

 

//////////////////////////////////////////

setuid로 uid 설정한 프로그램은 기본적으로 core 덤프 파일이 생성되지 않는다.

(core 파일이 안생겨서 삽질했음..)

다음으로 확인 가능하다.

 

$ cat /proc/sys/fs/suid_dumpable

0

(기본값=0. 0이면 core 파일 생성하지 않는다.)

 

이 값을 바꾸거나, /etc/sysctl.conf 파일에 다음을 추가하고 적용하면 된다.

fs.suid_dumpable = 1

(수정 후 "sysctl -p")

 

"man core" 로 상세 내용 확인 가능하다.

 

 

//////////////////////////////////////

 

실행 중인 프로세스를 강제 종료하지 않으면서 덤프를 남기고 싶을 때가 있다. (예를 들면 CPU 100% 상황이라던가...)

이럴 땐 gdb에 포함된 gcore를 이용하면 쉽게 남길 수 있다.

일단 ps -e | grep <프로세스 이름>으로 pid를 구한 후,

 

 

//////////////////////////////////////

[C++] WSL을 경유하거나 SSH로 원격 리눅스 머신을 경유해서 리눅스 덤프를 시각적으로 디버깅하기

 

 

///////////////////////////////////

https://gist.github.com/toolness/d56c1aab317377d5d17a

sudo apt-get install python3.8-dbg

'IT > python' 카테고리의 다른 글

pynecone 소개  (0) 2023.01.29