Sim, existe o Projeto Bash Debugger .
Vocêtambémpodeusarset-x
eset-v
naexecução.
boa sorte!
Existe alguma maneira de depurar o script bash sem usar echo e logging?
Estou falando de usar pontos de interrupção e coisas assim.
Sim, existe o Projeto Bash Debugger .
Vocêtambémpodeusarset-x
eset-v
naexecução.
boa sorte!
Existem várias maneiras diferentes, por exemplo:
Execute o seu script com a opção -x
bash -x yourscript.sh
Adicione set -x
em uma nova linha no início do seu arquivo de script após o Shebang #!/bin/bash
e antes do início do seu script, set -v
exibirá as linhas de entrada do shell, set -x
exibirá as linhas executadas comandos e argumentos
substitua o shebang do seu arquivo de script por #!/bin/bash -xv
Você pode usar essa pequena função para acessar o "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 |####################";
}
Então, 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 aceita qualquer comando, mantendo as variáveis locais intactas. Para sair do modo "debug", digite "exit" (não sairá do script) e ele continuará com o código. Se você usar "debug" dentro de um loop, ele irá parar a cada vez. Você pode envolvê-lo em um "if" (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"
Também adicionei o comando "vars", que despeja todas as variáveis disponíveis e seus valores. Você também pode adicionar seus próprios comandos personalizados.
Eu fiz o código em poucos minutos, então use-o por sua conta e risco. Esteja ciente de que no modo de depuração, qualquer comando pode ser executado, por isso, representa um risco de segurança se você o deixar em um script de produção.
Uma opção GUI para depurar um script bash é o IDE do Eclipse com os plashins BashEclipse / Shelt.
Isso fornece os recursos da sua pergunta ( breakpoints and stuff
) junto com uma série de outros recursos para depurar scripts complexos do bash.
Algumas das funcionalidades incluem: ( link )
A perspectiva do Editor de scripts:
Aperspectivadedepuração:
As etapas de uso são adicionar Shelled
e BashEclipse
pluggins ao eclipse. Em seguida, execute o procedimento fornecido no arquivo de texto leia-me do BashEclipse para iniciar o depurador.
Ao som do que o NES está dizendo, existem flags no bash para permitir a depuração.
O sinalizador set -x
pode ser definido e não configurado no terminal ou no 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 comandos set
fazem:
set -f
Desabilita a geração de nome de arquivo usando metacaracteres. set -v
Imprime (verbose) as linhas de entrada do shell à medida que são lidas. set -x
Imprimir rastreios de comando antes de executar o comando. set
na verdade tem muitos recursos, mas lamentavelmente nenhuma página man como é um shell embutido na ferramenta. O manual do conjunto está em a documentação do GNU Bash .
Existem inúmeras ferramentas de linha de comando que podem ajudá-lo a obter detalhes sobre seu programa, como:
stat
exibir arquivo ou status do sistema de arquivos file
determina um tipo de arquivo. hexdump
filter, que exibe os arquivos especificados em vários formatos nohup
Executa um script que não é interrompido
e muitos outros. Eu estava tentando pensar no comando que mostra caracteres ocultos, mas não posso fazer isso agora. O Hexdump fará isso, mas existe um melhor.
O comando de teclas ctrl \ fará com que um programa ou script em execução seja esvaziado. Então você poderia analisar o coredump. Eu provavelmente usaria o gdb para analisar um coredump, mas existem muitos programas para isso.
O shell bash tem algumas opções interessantes para depuração também.
opções --debugger
, -v
verbose, --dump-strings
e outras opções interessantes para ajudá-lo. Confira-os usando man bash
.
O comando trap
(shell integrado) pode ser muito útil para você. trap diz que se o seu programa sair inesperadamente, execute algo. Você leu sobre o trap e outros recursos úteis do Bash Shell aqui .
Falando geralmente 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.
Por fim, percebo que o exemplo que usei é trivial, mas 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 dividir e conquistar.