Apakah ada cara untuk men-debug skrip bash tanpa menggunakan gema dan pencatatan?
Saya sedang berbicara tentang menggunakan breakpoints dan hal-hal seperti itu.
Ya, ada Proyek Bash Debugger .
Anda juga dapat menggunakan set -x
dan set -v
saat eksekusi. Info lebih lanjut:
http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/debugging.html http://www.cyberciti.biz/tips/debugging-shell-script.html
Semoga berhasil!
Ada beberapa cara berbeda, yaitu:
Jalankan skrip Anda dengan opsi -x
bash -x yourscript.sh
Tambahkan set -x
baris baru di awal scriptfile Anda setelah Shebang #!/bin/bash
dan sebelum awal script Anda, set -v
akan menampilkan baris input shell, set -x
menampilkan perintah dan argumen yang dieksekusi
ganti shebang file skrip Anda dengan #!/bin/bash -xv
Saat ini, ada ekstensi Bash Debug Visual Studio Code . Ini memiliki 'Langkah Masuk / Keluar / Lebih' dan dapat menunjukkan nilai dari setiap variabel.
shellcheck adalah yang terbaik di kota -
Anda juga dapat berintegrasi dengan vim, di sini adalah repo git -
Anda dapat menggunakan fungsi kecil ini untuk masuk ke "konsol":
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 |####################";
}
Lalu, di dalam skrip Anda (CONTOH):
for file in *; do
...
if [[ $file == "strange_case.txt" ]]; then
# break the code here to analyze:
debug
fi
...
done
Ini akan menerima perintah apa pun, menjaga variabel lokal tetap utuh. Untuk keluar dari mode "debug", ketik "exit" (itu tidak akan keluar dari skrip) dan itu akan melanjutkan dengan kode. Jika Anda menggunakan "debug" di dalam satu lingkaran, itu akan berhenti setiap waktu. Anda dapat membungkusnya di dalam "jika" (seperti dalam contoh di atas), atau membuat fungsi "arloji":
function debug_watch
{
if [[ $1 == $2 ]]; then
debug
fi
}
# And Use it:
debug_watch "$file" "strange_case.txt"
Saya juga menambahkan perintah "vars" yang akan membuang semua variabel yang tersedia dan nilainya. Anda dapat menambahkan perintah kustom Anda sendiri juga.
Saya melakukan kode dalam beberapa menit jadi gunakan dengan risiko Anda sendiri. Sadarilah bahwa dalam mode debug, perintah apa pun dapat dijalankan, sehingga menimbulkan risiko keamanan jika Anda membiarkannya dalam skrip produksi.
* ) eval "$cmd" ;;
dandebug_watch "$file" strange_case.txt
.Untuk menyetel apa yang dikatakan NES, ada set flag di bash untuk memungkinkan debugging.
The
set -x
flag dapat menetapkan dan diset baik dari terminal, atau dari dalam naskah Anda. Menggunakan+
atau-
:Inilah yang
set
dilakukan perintah:set -f
Nonaktifkan pembuatan nama file menggunakan metacharacters.set -v
Mencetak (verbose) baris input shell saat dibaca.set -x
Cetak jejak perintah sebelum menjalankan perintah.set
sebenarnya memiliki banyak fitur, tetapi sayangnya tidak ada halaman manual karena merupakan alat bawaan shell. Manual untuk set ada di dokumentasi Bash GNU .Ada banyak alat baris perintah yang dapat membantu Anda memperoleh detail tentang program Anda seperti:
stat
menampilkan file atau status sistem filefile
tentukan jenis file.hexdump
filter yang menampilkan file yang ditentukan dalam berbagai formatnohup
Jalankan skrip yang tidak akan hangdan banyak lainnya. Saya mencoba memikirkan perintah yang menunjukkan karakter tersembunyi, tetapi saya tidak bisa melakukannya sekarang. Hexdump akan melakukannya tetapi ada yang lebih baik.
Perintah kuncinya ctrl\ akan menyebabkan program atau skrip yang berjalan ke dump inti. Maka Anda bisa menganalisis coredump. Saya mungkin akan menggunakan gdb untuk menganalisis coredump, tetapi ada banyak program untuk itu.
Bash shell memiliki beberapa opsi bagus untuk debugging juga. opsi
--debugger
, kata kerja-v
,--dump-strings
dan opsi bagus lainnya untuk membantu Anda. Lihat menggunakanman bash
.The
trap
perintah (shell built in) bisa sangat membantu bagi Anda. trap mengatakan jika program Anda keluar secara tidak terduga, jalankan sesuatu. Anda membaca tentang jebakan, dan built-in Bash Shell berguna lainnya di sini .Berbicara secara umum untuk saat ini, debugging adalah topik besar dalam bahasa apa pun. Beberapa topik lain yang berguna untuk debugging dalam bahasa pemrograman apa pun termasuk, pengalihan shell dan, pemrosesan sinyal.
Akhirnya, saya menyadari contoh yang saya gunakan adalah sepele, tetapi beberapa skrip shell bisa ratusan baris. Dalam situasi itu, saya suka menyisipkan tag komentar dan memblokir kode yang saya curigai salah, atau Atau, menyisipkan perintah keluar, dan mencoba untuk mengisolasi kode fungsional dari kode yang rusak, menggunakan teknik membagi dan menaklukkan.
sumber
Opsi GUI untuk men-debug skrip bash adalah Eclipse IDE dengan BashEclipse / Pluggins yang dikupas.
Ini memberikan fitur pertanyaan Anda (
breakpoints and stuff
) bersama dengan sejumlah fitur lain untuk debugging skrip bash kompleks.Beberapa fitur termasuk:
( https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script )
Perspektif Editor Skrip:
Perspektif Debugging:
Langkah-langkah untuk menggunakan adalah menambahkan
Shelled
danBashEclipse
pluggin ke gerhana. Kemudian jalankan prosedur yang disediakan di BashEclipse, baca file teks saya untuk memulai debugger.sumber