Debugging

정승균·2020년 12월 30일
0

리눅스

목록 보기
22/29
post-thumbnail
post-custom-banner

Ⅰ. xtrace


  • 명령행의 실행값과 결과를 출력

1. 시작과 동시에 on

#! /bin/bash -x

2. 스크립트 중간에 on/off

set -x
...(trace 적용)...
set +x

3. 예

jsg@jsg-ubuntu:~$ cat test.sh
#!/bin/bash -x
[ $1 -lt 100 ] && echo "$1 is less then 100."
[ $1 -gt 100 ] && echo "$1 is greater than 100."

jsg@jsg-ubuntu:~$ ./test.sh 50
+ '[' 50 -lt 100 ']'
+ echo '50 is less then 100.'
50 is less then 100.
+ '[' 50 -gt 100 ']'

Ⅱ. verbose


  • 명령행의 소스를 그대로 출력

1. 시작과 동시에 on

#! /bin/bash -v

2. 스크립트 중간에 on/off

set -v
set +v

3. 예

jsg@jsg-ubuntu:~$ cat test.sh
#!/bin/bash -v
[ $1 -lt 100 ] && echo "$1 is less then 100."
[ $1 -gt 100 ] && echo "$1 is greater than 100."

jsg@jsg-ubuntu:~$ ./test.sh 50
#!/bin/bash -v
[ $1 -lt 100 ] && echo "$1 is less then 100."
50 is less then 100.
[ $1 -gt 100 ] && echo "$1 is greater than 100."

Ⅲ. trap


  • trap 이 설정되지 않으면 default handler로 작동

  • trap command/function SIGSPEC : 시그널을 받으면 명령/함수 실행

  • trap - SIGSPEC : default handler로 초기화

  • trap -p : trap 리스트

1. SIGSPEC

SIGSPEC행동
EXITshell/subshell이 종료될 떄 호출
ERR에러 발생시 호출
DEBUG명령실행 전 매번 호출
RETURN함수나 모듈파일에서 리턴될 때 호출
SIGXXX시그널 받을시 호출

2. 예

  • test.sh 를 다음과 같이 작성 후 실행
#!/bin/bash

function print_time () {
	echo "Current time = [$(date +%H:%M:%S)]"
}

trap 'echo ignored signal' SIGHUP SIGINT
trap 'echo received SIGTERM; exit 0' SIGTERM
trap print_time SIGUSR1

while : ;
do
	sleep 1
done
  • 다른 터미널에 다음과 같이 실행
jsg@jsg-ubuntu:~$ pkill -USR1 test
jsg@jsg-ubuntu:~$ pkill -SIGINT test
jsg@jsg-ubuntu:~$ pkill -SIGTERM test
  • 결과
Current time = [04:27:12]
ignored signal
received SIGTERM
post-custom-banner

0개의 댓글