जवाबों:
हां, बैश डेबगर प्रोजेक्ट है ।
आप उपयोग 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
शेबंग के बाद #!/bin/bash
अपनी स्क्रिप्टफाइल की शुरुआत में एक नई लाइन में जोड़ें और अपनी स्क्रिप्ट की शुरुआत से पहले, set -v
शेल इनपुट लाइनों को set -x
प्रदर्शित करेगा, निष्पादित कमांड और तर्क प्रदर्शित करेगा।
अपनी स्क्रिप्ट फ़ाइल के शेल्फ़ को बदलें #!/bin/bash -xv
आजकल, विजुअल स्टूडियो कोड बैश डीबग एक्सटेंशन है । इसमें 'स्टेप इन / आउट / ओवर' है और प्रत्येक वेरिएबल का मान दिखा सकता है।
शेलचेक शहर में सबसे अच्छा है -
तुम भी विम के साथ एकीकृत कर सकते हैं, यहाँ git रेपो है -
आप इस छोटे फ़ंक्शन का उपयोग "कंसोल" में छोड़ने के लिए कर सकते हैं:
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
यह स्थानीय चर को बरकरार रखते हुए किसी भी कमांड को स्वीकार करेगा। "डिबग" मोड से बाहर निकलने के लिए, "बाहर निकलें" टाइप करें (यह स्क्रिप्ट से बाहर नहीं निकलेगा) और यह कोड के साथ जारी रहेगा। यदि आप लूप के अंदर "डिबग" का उपयोग करते हैं, तो यह हर बार बंद हो जाएगा। आप इसे "यदि" (जैसा कि ऊपर उदाहरण में दिया गया है) के अंदर लपेट सकते हैं, या "घड़ी" फ़ंक्शन बना सकते हैं:
function debug_watch
{
if [[ $1 == $2 ]]; then
debug
fi
}
# And Use it:
debug_watch "$file" "strange_case.txt"
मैंने "var" कमांड भी जोड़ा जो सभी उपलब्ध चर और उनके मूल्यों को डंप कर देगा। आप अपनी खुद की अनुकूलित कमांड भी जोड़ सकते हैं।
मैंने कुछ ही मिनटों में कोड किया था इसलिए इसे अपने जोखिम के तहत उपयोग करें। ध्यान रखें कि डिबग मोड में किसी भी कमांड को निष्पादित किया जा सकता है, इसलिए यदि आप इसे प्रोडक्शन स्क्रिप्ट में छोड़ते हैं तो यह सुरक्षा जोखिम पैदा करता है।
NES क्या कह रहा है की धुन पर डिबगिंग की अनुमति देने के लिए बैश में झंडे लगाए जाते हैं।
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 बैश डॉक्यूमेंटेशन में है ।
कई कमांड लाइन उपकरण हैं जो आपके कार्यक्रम के बारे में विवरण प्राप्त करने में आपकी मदद कर सकते हैं जैसे:
stat
प्रदर्शन फ़ाइल या फ़ाइल सिस्टम स्थिति file
एक फ़ाइल प्रकार निर्धारित करें।hexdump
फ़िल्टर जो विभिन्न स्वरूपों में निर्दिष्ट फ़ाइलों को प्रदर्शित करता हैnohup
एक स्क्रिप्ट चलाएं जो लटकी न हो
और कई अन्य। मैं उस आदेश के बारे में सोचने की कोशिश कर रहा था जो छिपे हुए पात्रों को दिखाता है, लेकिन मैं अभी ऐसा नहीं कर सकता। हेक्सडम्प इसे करेगा लेकिन एक बेहतर है।
मुख्य कमांड ctrl\कोर डंप के लिए एक रनिंग प्रोग्राम या स्क्रिप्ट का कारण होगा। तो फिर आप coredump का विश्लेषण कर सकते हैं। मैं शायद एक coredump का विश्लेषण करने के लिए gdb का उपयोग करूंगा, लेकिन उसके लिए कई कार्यक्रम मौजूद हैं।
बैश शेल में डिबगिंग के लिए कुछ निफ्टी विकल्प भी हैं। विकल्प --debugger
, -v
क्रिया, --dump-strings
और अन्य निफ्टी विकल्प आपकी सहायता के लिए। उनका उपयोग करके देखें man bash
।
trap
आदेश (में बनाया शेल) आप के लिए बहुत उपयोगी हो सकता है। ट्रैप का कहना है कि यदि आपका प्रोग्राम अप्रत्याशित रूप से बाहर निकलता है, तो कुछ निष्पादित करें। आप जाल के बारे में पढ़ते हैं, और अन्य आसान बैश शैल निर्माण यहाँ हैं ।
फिलहाल आम तौर पर बोलना, डिबगिंग किसी भी भाषा में एक बहुत बड़ा विषय है। कुछ अन्य विषय जो किसी भी प्रोग्रामिंग भाषा में डिबगिंग के लिए आसान हो सकते हैं, में शामिल हैं, शेल पुनर्निर्देशन और, सिग्नल प्रोसेसिंग।
अंत में, मुझे लगता है कि मैंने जो उदाहरण इस्तेमाल किया है वह तुच्छ है, लेकिन यह है कि कुछ शेल स्क्रिप्ट सैकड़ों लाइनें हो सकती हैं। उन स्थितियों में, मैं या तो टिप्पणियां टैग सम्मिलित करना चाहता हूं और मुझे संदेह है कि कोड गलत है, या वैकल्पिक रूप से ब्लॉक करें, एक एक्जिट कमांड डालें, और फूट कोड से कार्यात्मक कोड को अलग करने का प्रयास करें, एक फूट डालो और जीतो तकनीक का उपयोग करें।
एक बैश स्क्रिप्ट डिबग करने के लिए GUI विकल्प बैशलेक / शेल्ड प्लगिन्स के साथ ग्रहण आईडीई है।
यह आपके प्रश्न ( breakpoints and stuff
) की सुविधाओं के साथ-साथ जटिल बैश स्क्रिप्ट डिबगिंग के लिए अन्य सुविधाओं की मेजबानी भी देता है।
कुछ विशेषताओं में शामिल हैं:
( https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script )
स्क्रिप्ट संपादक परिप्रेक्ष्य:
उपयोग करने के लिए चरण Shelled
और BashEclipse
प्लगइन्स को ग्रहण में जोड़ना है । फिर डिबगर शुरू करने के लिए BashEclipse में दी गई प्रक्रिया को मुझे पाठ फ़ाइल पढ़ें।
* ) eval "$cmd" ;;
औरdebug_watch "$file" strange_case.txt
।