Respostas:
Sim, existe o Bash Debugger Project .
Você também pode usar set -x
e set -v
na execução. Mais informações:
http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/debugging.html http://www.cyberciti.biz/tips/debugging-shell-script.html
Boa sorte!
Existem várias maneiras diferentes, ou seja:
Execute seu script com a opção -x
bash -x yourscript.sh
Adicione set -x
uma nova linha no início do seu arquivo #!/bin/bash
de script após o Shebang e antes do início do seu script, set -v
exibirá as linhas de entrada do shell, set -x
exibirá os comandos e argumentos executados
substitua o shebang do seu arquivo de script por #!/bin/bash -xv
Atualmente, há a extensão de depuração do Visual Studio Code Bash . Possui 'Entrada / saída / saída' e pode mostrar o valor de cada variável.
o cheque é o melhor da cidade -
você também pode integrar com o vim, aqui está o repositório git -
Você pode usar esta pequena função para entrar no "console":
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 |####################";
}
Em seguida, dentro do seu script (EXEMPLO):
for file in *; do
...
if [[ $file == "strange_case.txt" ]]; then
# break the code here to analyze:
debug
fi
...
done
Ele aceitará qualquer comando, mantendo intactas as variáveis locais. Para sair do modo "debug", digite "exit" (não sairá do script) e continuará com o código. Se você usar "debug" dentro de um loop, ele será interrompido a cada vez. Você pode colocá-lo dentro de um "se" (como no exemplo acima) ou criar uma função "watch":
function debug_watch
{
if [[ $1 == $2 ]]; then
debug
fi
}
# And Use it:
debug_watch "$file" "strange_case.txt"
Eu também adicionei o comando "vars", que despejará todas as variáveis disponíveis e seus valores. Você também pode adicionar seus próprios comandos personalizados.
Fiz o código em alguns minutos, portanto, use-o por sua conta e risco. Esteja ciente de que, no modo de depuração, qualquer comando pode ser executado; portanto, isso representa um risco de segurança se você o deixar em um script de produção.
Para o que o NES está dizendo, há sinalizadores definidos no bash para permitir a depuração.
O set -x
sinalizador pode ser definido e desabilitado no terminal ou dentro do seu script. Usando +
ou -
:
#!/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
Aqui está o que os set
comandos fazem:
set -f
Desative a geração de nome de arquivo usando metacaracteres.set -v
Imprime linhas de entrada do shell (detalhadas) à medida que são lidas.set -x
Imprima rastreamentos de comandos antes de executar o comando.set
na verdade, possui muitos recursos, mas lamentavelmente nenhuma página de manual, pois é um shell integrado à ferramenta. O manual para set está na documentação do GNU Bash .
Existem inúmeras ferramentas de linha de comando que podem ajudá-lo a obter detalhes sobre o seu programa, como:
stat
exibir arquivo ou status do sistema de arquivos file
determine um tipo de arquivo.hexdump
filtro que exibe os arquivos especificados em vários formatosnohup
Execute um script que não travará
e muitos outros. Eu estava tentando pensar no comando que mostra caracteres ocultos, mas não posso fazê-lo agora. O Hexdump fará isso, mas há um melhor.
O comando key ctrl\fará com que um programa ou script em execução seja executado no core dump. Então você pode analisar o coredump. Eu provavelmente usaria o gdb para analisar um coredump, mas existem muitos programas para isso.
O shell bash também possui algumas opções bacanas para depuração. opções --debugger
, -v
detalhado --dump-strings
e outras opções bacanas para ajudá-lo. Vê-los usando man bash
.
O trap
comando (shell incorporado) pode ser muito útil para você. trap diz que se o seu programa sair inesperadamente, execute algo. Você leu sobre armadilhas e outros práticos recursos do Bash Shell aqui .
Falando de um modo geral no momento, a depuração é um tópico enorme em qualquer idioma. Alguns outros tópicos que podem ser úteis para depuração em qualquer linguagem de programação incluem redirecionamento de shell e processamento de sinal.
Finalmente, percebo que o exemplo que usei é trivial, mas que alguns scripts de shell podem ter centenas de linhas. Nessas situações, gosto de inserir tags de comentários e bloquear o código que suspeito estar com defeito ou, alternativamente, inserir um comando de saída e tentar isolar o código funcional do código quebrado, usando uma técnica de divisão e conquista.
Uma opção da GUI para depurar um script bash é o IDE Eclipse com os plug-ins BashEclipse / Shelled.
Isso fornece os recursos da sua pergunta ( breakpoints and stuff
), além de vários outros recursos para depurar scripts bash complexos.
Alguns dos recursos incluem:
( https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script )
A perspectiva do Editor de scripts:
As etapas para o uso são adicionar os plugins Shelled
e BashEclipse
ao eclipse. Em seguida, execute o procedimento fornecido no arquivo de texto leia-me do BashEclipse para iniciar o depurador.
* ) eval "$cmd" ;;
edebug_watch "$file" strange_case.txt
.