Yanıtlar:
Evet, Bash Debugger Projesi var .
Ayrıca set -x
ve set -v
yürütme sırasında da kullanabilirsiniz . Daha fazla bilgi:
http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/debugging.html http://www.cyberciti.biz/tips/debugging-shell-script.html
İyi şanslar!
Birkaç farklı yol var, yani:
Komut dosyanızı -x seçeneğiyle çalıştırın
bash -x yourscript.sh
set -x
Shebang'dan sonra ve betiğinizin #!/bin/bash
başlangıcından önce script dosyanızın başına yeni bir satır ekleyin set -v
, kabuk giriş satırlarını set -x
gösterir, yürütülen komutları ve argümanları görüntüler
script dosyanızın shebang’ını değiştirin #!/bin/bash -xv
Günümüzde, Visual Studio Code Bash Debug uzantısı var . 'Step in / out / over' vardır ve her değişkenin değerini gösterir.
shellcheck şehirdeki en iyisidir -
Ayrıca vim ile bütünleşebilirsiniz, işte git repo -
Bu küçük işlevi, "konsol" içine bırakmak için kullanabilirsiniz:
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 |####################";
}
Ardından, komut dosyanızın içinde (ÖRNEK):
for file in *; do
...
if [[ $file == "strange_case.txt" ]]; then
# break the code here to analyze:
debug
fi
...
done
Yerel değişkenleri sağlam tutan herhangi bir komutu kabul eder. "Hata ayıklama" modundan çıkmak için, "exit" yazın (koddan çıkmaz) ve kodla devam eder. Bir döngü içinde "hata ayıklama" kullanırsanız, her zaman duracaktır. Bir "if" (yukarıdaki örnekte olduğu gibi) içine sarabilir veya bir "izle" işlevi oluşturabilirsiniz:
function debug_watch
{
if [[ $1 == $2 ]]; then
debug
fi
}
# And Use it:
debug_watch "$file" "strange_case.txt"
Ayrıca mevcut tüm değişkenleri ve değerlerini boşa çıkaran "vars" komutunu da ekledim. Kendi özelleştirilmiş komutlarınızı da ekleyebilirsiniz.
Kodu birkaç dakika içinde yaptım, bu yüzden kendi risk altında kullanın. Hata ayıklama modunda herhangi bir komutun çalıştırılabileceğini unutmayın; bu nedenle bir üretim komut dosyasında bırakırsanız güvenlik riski oluşturur.
NES'in söylediklerine göre bash'ta hata ayıklamaya izin veren bayraklar yerleştirilmiş.
set -x
Bayrak set ve unset ya terminalden veya komut dosyası içinde olabilir. +
Veya kullanarak -
:
#!/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
İşte set
komutların yaptığı:
set -f
Meta karakterleri kullanarak dosya adı oluşturmayı devre dışı bırakın.set -v
(Ayrıntılı) kabuk giriş satırlarını okunduğu gibi yazdırır.set -x
Komutu çalıştırmadan önce komut izlerini yazdırın.set
aslında birçok özelliğe sahip, ancak alet içinde yerleşik bir kabuk olduğu için hiçbir şekilde man sayfa yok. Küme el kitabı GNU Bash belgelerindedir .
Programınız hakkında ayrıntılı bilgi edinmenize yardımcı olabilecek çok sayıda komut satırı aracı vardır:
stat
dosya veya dosya sistemi durumunu göster file
bir dosya türü belirler.hexdump
belirtilen dosyaları çeşitli formatlarda görüntüleyen filtrenohup
Asmayacak bir komut dosyası çalıştır
ve diğerleri. Gizli karakterleri gösteren komutu düşünmeye çalışıyordum, ama şu anda yapamam. Hexdump yapacak ama daha iyi bir tane var.
Anahtar komutu ctrl\ , çalışan bir program veya komut dosyasının çekirdek dökümüne neden olur. O zaman bu bağımlılığı analiz edebilirsin. Muhtemelen bir coredump'i analiz etmek için gdb'yi kullanırdım, fakat bunun için pek çok program var.
Bash kabuğunda hata ayıklamak için de şık seçenekler var. seçenekler --debugger
, -v
ayrıntılı bilgiler --dump-strings
ve size yardımcı olacak diğer şık seçenekler. Kullanarak onları kontrol edin man bash
.
trap
Komutu (yerleşik kabuk) sizin için çok yararlı olabilir. tuzak diyor ki eğer programınız beklenmedik bir şekilde çıkarsa, bir şeyler yürütün. Burada tuzak ve diğer kullanışlı Bash Shell yerleşiklerini okuyorsun .
Genel olarak şu an için konuşan, hata ayıklama herhangi bir dilde büyük bir konudur. Herhangi bir programlama dilinde hata ayıklamak için kullanışlı olabilecek diğer bazı başlıklar arasında kabuk yeniden yönlendirme ve sinyal işleme bulunur.
Sonunda, kullandığım örneğin önemsiz olduğunu fark ettim, ancak bazı kabuk komut dosyalarının yüzlerce satır olabileceğini biliyorum. Bu durumlarda, yorum etiketleri eklemeyi ve hatalı olduğundan şüphelendiğim kodu engellemeyi ya da Alternatif olarak, bir çıkış komutu eklemeyi ve işlevsel kodu bir bölme ve fethetme tekniğini kullanarak bozuk koddan ayırmayı denemeyi seviyorum.
Bir bash betiğini hata ayıklamak için bir GUI seçeneği BashEclipse / Shelled eklentileri olan Eclipse IDE'dir.
Bu, sorunuzun özelliklerini verir (breakpoints and stuff
) özelliklerini karmaşık bash komut dosyalarında hata ayıklamak için bir dizi başka özellikle birlikte .
Özelliklerden bazıları şunlardır:
( https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script )
Komut Dosyası Düzenleyicisi perspektifi:
Kullanma adımları , tutulması için Shelled
ve BashEclipse
eklentileri eklemektir. Ardından, hata ayıklayıcısını başlatmak için BashEclipse bana verilen metin dosyasını oku prosedürünü çalıştırın.
* ) eval "$cmd" ;;
vedebug_watch "$file" strange_case.txt
.