답변:
예, Bash Debugger Project가 있습니다.
사용 set -x
하고 set -v
실행할 때도 사용할 수 있습니다 . 더 많은 정보:
http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/debugging.html http://www.cyberciti.biz/tips/debugging-shell-script.html
행운을 빕니다!
요즘에는 Visual Studio Code Bash Debug 확장이 있습니다. 'Step in / out / over'가 있으며 각 변수의 값을 표시 할 수 있습니다.
쉘 체크는이 도시에서 최고입니다.
vim과 통합 할 수도 있습니다. 여기 git repo가 있습니다.
이 작은 기능을 사용하여 "콘솔"에 들어갈 수 있습니다.
function debug
{
echo "#############| Entering DEBUG mode |####################";
cmd=""
while [[ $cmd != "exit" ]]; do
read -p "> " cmd
case "$cmd" in
vars ) ( set -o posix ; set );;
exit ) ;;
* ) eval "$cmd";;
esac
done
echo "#############| End of DEBUG mode |####################";
}
그런 다음 스크립트 내부 (EXAMPLE)에서
for file in *; do
...
if [[ $file == "strange_case.txt" ]]; then
# break the code here to analyze:
debug
fi
...
done
로컬 변수를 그대로 유지하면서 모든 명령을 수락합니다. "디버그"모드를 종료하려면 "exit"를 입력하면 (스크립트가 종료되지 않음) 코드가 계속 진행됩니다. 루프 내에서 "디버그"를 사용하면 매번 중지됩니다. 위의 예와 같이 "if"안에 넣거나 "watch"함수를 만들 수 있습니다.
function debug_watch
{
if [[ $1 == $2 ]]; then
debug
fi
}
# And Use it:
debug_watch "$file" "strange_case.txt"
또한 사용 가능한 모든 변수와 해당 값을 덤프하는 "vars"명령을 추가했습니다. 사용자 정의 명령을 추가 할 수도 있습니다.
몇 분 안에 코드를 작성 했으므로 자신의 위험에 따라 사용하십시오. 디버그 모드에서는 모든 명령을 실행할 수 있으므로 프로덕션 스크립트에 그대로두면 보안 위험이 있습니다.
NES가 말하는 것을 튜닝하기 위해 bash에는 디버깅을 허용하는 플래그가 설정되어 있습니다.
set -x
플래그가 설정 및 해제하거나 터미널에서, 또는 스크립트 내에서 할 수있다. +
또는 사용 -
:
#!/bin/bash
#fileinfo
ls -l $1
set -x # start debugging here
wc -l $1
set +x # stop debugging here
file $1
set -v # start verbose output
w | more
echo ""
echo -n "Number of users: "
set +v # end verbose output
who | wc -l
set
명령은 다음과 같습니다 .
set -f
메타 문자를 사용하여 파일 이름 생성을 비활성화합니다.set -v
쉘 입력 행을 읽을 때 인쇄합니다 (자세한 내용).set -x
명령을 실행하기 전에 명령 추적을 인쇄하십시오.set
실제로 많은 기능을 가지고 있지만 쉘에 내장 된 도구이므로 맨 페이지가 없습니다. set 매뉴얼 은 GNU Bash 문서에 있습니다.
프로그램에 대한 세부 정보를 얻는 데 도움이되는 수많은 명령 줄 도구가 있습니다.
stat
파일 또는 파일 시스템 상태 표시 file
파일 형식을 결정하십시오.hexdump
지정된 파일을 다양한 형식으로 표시하는 필터nohup
멈추지 않는 스크립트를 실행
그리고 다른 많은. 숨겨진 문자를 보여주는 명령을 생각하고 있었지만 지금은 할 수 없습니다. Hexdump가 그렇게하지만 더 나은 것이 있습니다.
키 명령 ctrl\으로 실행중인 프로그램 또는 스크립트가 코어 덤프됩니다. 그런 다음 코어 덤프를 분석 할 수 있습니다. 아마도 gdb를 사용하여 코어 덤프를 분석 할 것이지만 많은 프로그램이 존재합니다.
bash 쉘에는 디버깅을위한 멋진 옵션이 있습니다. options --debugger
, -v
verbose --dump-strings
및 기타 유용한 옵션이 있습니다. 를 사용하여 확인하십시오 man bash
.
trap
명령 (내장 쉘은) 당신을 위해 매우 도움이 될 수 있습니다. 트랩은 프로그램이 예기치 않게 종료되면 무언가를 실행한다고 말합니다. 트랩 및 기타 편리한 Bash Shell 내장에 대한 내용은 여기를 참조하십시오 .
일반적으로 말하면, 디버깅은 모든 언어에서 큰 주제입니다. 프로그래밍 언어로 디버깅하는 데 유용한 다른 주제로는 쉘 재 지정 및 신호 처리가 있습니다.
마지막으로, 내가 사용한 예제는 사소한 것이지만 일부 셸 스크립트는 수백 줄이 될 수 있습니다. 이러한 상황에서는 주석 태그를 삽입하고 결함이 의심되는 코드를 차단하거나 종료 명령을 삽입하고 나누기 및 정복 기술을 사용하여 기능 코드를 손상된 코드에서 격리하려고합니다.
bash 스크립트를 디버깅하기위한 GUI 옵션은 BashEclipse / Shelled 플러그인이있는 Eclipse IDE입니다.
breakpoints and stuff
복잡한 bash 스크립트를 디버깅하기위한 다양한 기능과 함께 질문 기능 ( )을 제공합니다.
일부 기능에는 다음이 포함됩니다
( https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script )
사용 단계는 일식에 플러그인 Shelled
과 BashEclipse
플러그인을 추가하는 것 입니다. 그런 다음 BashEclipse read me 텍스트 파일에 제공된 프로 시저를 실행하여 디버거를 시작하십시오.
* ) eval "$cmd" ;;
와debug_watch "$file" strange_case.txt
.