728x90
디버깅 오류 발생
- 복잡한 스크립트를 작성하다 보면 오류가 자주 발생
- 구문 오류는 바로 확인하여 수정 가능
- 실행 오류는 추적하기 쉽지 않음
- 쉘은 별도의 디버거를 제공하진 않지만 각 행의 실행을 추적할 수 있는 방법 제공
bash –x를 이용한 디버깅
- 가장 많이 사용되며, 간단한 스크립트 디버깅 방법
- -x 옵션으로 실행하면 각 행이 실행될 때마다 화면에 출력
$ bash –x test_while
+count=1
+sum=0
+(( count<=10 ))
+(( sum+=count ))
......
+let count+=1
+(( count<=10 ))
+echo “Sum(1-10) : 55’
Sum(1~10) : 55
$
- +로 시작하는 행은 스크립트의 내용
- 가장 마지막의 +가 없는 행은 echo 명령에 의해 표준 출력으로 나오는 내용
trap을 이용한 디버깅
- bash –x 방법은 기본 실행 여부를 확인할 수는 있지만 실제 변수 안에 저장되는 값을 알 수 없다는 단점이 있음
- 스크립트 안에서 시그널을 처리하는 trap을 이용해 해결
$ cat –n test_trap
1 #!/bin/bash
2 # test_trap : trap을 테스트하는 스크립트
3 #
4
5 trap ‘echo “$LINENO : count=$count”’ DEBUG
6 count=1
7 sum=0
8 while (( count<=10 ))
9 do
10 (( sum+=count ))
11 let count+=1
12 done
13
14 echo “Sum(1~10) : $sum”
$
- 실행 결과
- 5행이 시그널 처리를 위해 추가된 부분
- 시그널은 실행 중인 프로세스에 정보를 전달하는 메시지
- 가장 대표적인 시그널이 프로세스를 종료시키는 ^C
- DEBUG 시그널은 쉘이 스크립트를 디버깅하기 위해 생성하는 시그널로 스크립트의 명령이 생성될 때마다 생성됨
- 5행에서 trap 명령은 DEBUG 시그널을 받으면 echo 문을 실행
- 디버깅이 완료되면 trap 명령 앞에 #을 추가해 주석으로 처리
$ chmod +x test_trap
6 : count=
7 : count=1
8 : count=1
10 : count=2
11 : count=2
......
10 : count=10
11 : count=10
8 : count=11
14 : count=11
Sum(1~10) : 55
$
728x90
'프로그래밍 > Unix' 카테고리의 다른 글
[유닉스] 시스템 부팅과 종료 (0) | 2020.05.17 |
---|---|
[유닉스] 시스템 관리자 (0) | 2020.05.16 |
쉘 스크립트(Shell Script) 함수 (0) | 2020.05.13 |
쉘 스크립트(Shell Script) 제어문 - select, continue, until 문 (0) | 2020.05.12 |
쉘 스크립트(Shell Script) 제어문 - for, while 문(반복문) (0) | 2020.05.11 |