bash 디 버 깅 경험 치
4044 단어 Shell
다음은 테스트 스 크 립 트 를 사용 하여 bash 디 버 깅 방법 을 설명 합 니 다.
test.sh
[plain] view plain copy print ?
#!/bin/bash
echo "----------------begin-----------------"
awk '{sum+=1} END{print sum}' test.sh
MAX=3
do
echo $loaddate
#!/bin/bash
echo "----------------begin-----------------"
awk '{sum+=1} END{print sum}' test.sh
MAX=3
for ((i = 0; i < MAX; i++))
do
loaddate=`date -d"-$i day" +%Y-%m-%d`
echo $loaddate
done
echo "----------------end-----------------"
1.bash-x 사용
bash-x 스 크 립 트 실행 과정 에서 모든 문 구 를 출력 합 니 다 like:
$ bash -x test.sh
+ echo ----------------begin-----------------
----------------begin-----------------
+ awk '{sum+=1} END{print sum}' test.sh
14
+ MAX=3
+ (( i = 0 ))
+ (( i < MAX ))
++ date '-d-0 day' +%Y-%m-%d
+ loaddate=2013-03-05
+ echo 2013-03-05
2013-03-05
+ (( i++ ))
+ (( i < MAX ))
++ date '-d-1 day' +%Y-%m-%d
+ loaddate=2013-03-04
+ echo 2013-03-04
2013-03-04
+ (( i++ ))
+ (( i < MAX ))
++ date '-d-2 day' +%Y-%m-%d
+ loaddate=2013-03-03
+ echo 2013-03-03
2013-03-03
+ (( i++ ))
+ (( i < MAX ))
+ echo ----------------end-----------------
----------------end-----------------
주석 을 맞 추 면 bash-x 는 기본적으로 일상 80%의 수 요 를 만족 시 킬 수 있 습 니 다.
2.set 가끔 은 우리 의 스 크 립 트 가 매우 복잡 합 니 다.bash-x 를 사용 하여 얻 은 출력 이 너무 많아 서 필요 한 정 보 를 찾기 어렵 습 니 다.
set 는 부분 디 버 깅 을 할 수 있 습 니 다.디 버 깅 코드 가 필요 하기 전에"set-x"를 추가 하고 디 버 깅 코드 가 필요 한 후에"set+x"를 추가 하면 됩 니 다.
like:
test.sh 수정:
....
set -x
awk '{sum+=1} END{print sum}' test.sh
set +x
.....
실행:
----------------begin-----------------
+ awk '{sum+=1} END{print sum}' test.sh
16
+ set +x
2013-03-05
2013-03-04
2013-03-03
----------------end-----------------
3.bash 디 버 깅 도구 bashdb(Bash Debugger)bashdb 를 사용 하 는 것 은 GDB 와 같은 디 버 깅 도구 입 니 다.GDB 를 사용 하 는 학생 들 은 bashdb 를 사용 하 는 데 기본 적 인 장애 가 없습니다.
bashdb 는 정지점 설정,변수 보기 등 일반적인 디 버 깅 작업 을 실행 할 수 있 습 니 다.
bashdb 는 따로 설치 해 야 합 니 다.
아래 와 같이 사용:
$ bashdb --debug test.sh
bash debugger, bashdb, release 4.2-0.8
Copyright 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Rocky Bernstein
This is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
(/home/work/code/test.sh:3):
3: echo "----------------begin-----------------"
bashdb<0>
n #다음 단계
----------------begin-----------------
(/home/work/code/test.sh:5):
5: awk '{sum+=1} END{print sum}' test.sh
bashdb<1>
l\#상하 총 10 줄 코드 표시
1: #!/bin/bash
2:
3: echo "----------------begin-----------------"
4:
5: => awk '{sum+=1} END{print sum}' test.sh
6:
7: MAX=3
8: for ((i = 0; i < MAX; i++))
9: do
10: loaddate=`date -d"-$i day" +%Y-%m-%d`
bashdb<2>
b 10\#10 줄 설정 정지점
Breakpoint 1 set in file /home/work/code/test.sh, line 10.
bashdb<3>c\#계속 실행
14
Breakpoint 1 hit (1 times).
(/home/work/code/test.sh:10):
10: loaddate=`date -d"-$i day" +%Y-%m-%d`
bashdb<4>
print$i\#인쇄 변수 값
0
14: echo "----------------end-----------------"
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell alias 명령에 별칭을 설정하는 방법명령에 별명을 설정하면 명령의'작은 이름'으로 삼을 수 있지만, 이렇게 하는 것이 무슨 의미가 있습니까? 이때 별명이 작용할 수 있다.vim 명령의 별명을vi라고 정의하면 이후에 실행된vi 명령은 실제로vim 명령을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.