Ответы:
Да, есть 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
Удачи!
Есть несколько разных способов, а именно:
Запустите ваш скрипт с опцией -x
bash -x yourscript.sh
Добавление set -x
новой строки в начале вашего файла сценария после Shebang #!/bin/bash
и перед началом вашего сценария, set -v
будет отображать строки ввода оболочки, set -x
отображает выполненные команды и аргументы
замените shebang вашего файла сценария на #!/bin/bash -xv
В настоящее время существует расширение для отладки кода Visual Studio Bash . Он имеет «Step in / out / over» и может показывать значение каждой переменной.
Shellcheck - лучший в городе -
вы также можете интегрироваться с 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 |####################";
}
Затем внутри вашего сценария (ПРИМЕР):
for file in *; do
...
if [[ $file == "strange_case.txt" ]]; then
# break the code here to analyze:
debug
fi
...
done
Он будет принимать любую команду, сохраняя локальные переменные нетронутыми. Чтобы выйти из режима «отладки», введите «exit» (он не выйдет из сценария), и он продолжит работу с кодом. Если вы используете «debug» внутри цикла, он будет останавливаться каждый раз. Вы можете заключить его в «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
на самом деле имеет много функций, но, к сожалению, нет справочной страницы, так как это встроенный инструмент оболочки. Руководство по настройке находится в документации GNU Bash .
Существует множество инструментов командной строки, которые могут помочь вам получить подробную информацию о вашей программе, например:
stat
отображать состояние файла или файловой системы file
определить тип файла.hexdump
фильтр, который отображает указанные файлы в различных форматахnohup
Запустите скрипт, который не зависнет
и многие другие. Я пытался думать о команде, которая показывает скрытые символы, но я не могу сделать это прямо сейчас. Hexdump сделает это, но есть лучший.
Команда key ctrl\приведет к тому, что запущенная программа или скрипт выполнит дамп памяти. Тогда вы можете проанализировать coredump. Я бы, вероятно, использовал gdb для анализа coredump, но для этого существует много программ.
В оболочке bash также есть несколько опций для отладки. варианты --debugger
, -v
подробные --dump-strings
и другие отличные варианты, чтобы помочь вам. Проверьте их, используя man bash
.
Команда trap
(встроенная оболочка) может быть очень полезной для вас. trap говорит, что если ваша программа неожиданно завершает работу, выполните что-то. Вы читаете о ловушке и других полезных встроенных функциях Bash Shell здесь .
Говоря в общем на данный момент, отладка - огромная тема на любом языке. Некоторые другие темы, которые могут быть полезны для отладки на любом языке программирования, включают перенаправление оболочки и обработку сигналов.
Наконец, я понимаю, что пример, который я использовал, тривиален, но некоторые сценарии оболочки могут содержать сотни строк. В этих ситуациях мне нравится либо вставлять теги комментариев и блокировать код, который я подозреваю, что он неисправен, либо альтернативно вставлять команду выхода и пытаться изолировать функциональный код от сломанного кода, используя технику «разделяй и властвуй».
Опция GUI для отладки сценария bash - это Eclipse IDE с плагинами BashEclipse / Shelled.
Это дает функции вашего вопроса ( breakpoints and stuff
) вместе с множеством других функций для отладки сложных сценариев bash.
Некоторые из функций включают в себя:
( https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script )
Перспектива редактора сценариев:
Шаги для использования, чтобы добавить Shelled
и BashEclipse
плагины для затмения. Затем запустите процедуру, представленную в текстовом файле read me для BashEclipse, чтобы запустить отладчик.
* ) eval "$cmd" ;;
иdebug_watch "$file" strange_case.txt
.