ÈçºÎÔÚUnix/Linuxϵ÷ÊԽű¾³ÌÐò
commandBash shell offers debugging options which can be turn on or off using set command.
=> set -x : Display commands and their arguments as they are executed.
=> set -v : Display shell input lines as they are read.
You can use above two command in shell script itself:
#!/bin/bash
clear
# turn on debug mode
set -x
for f in *
do
file $f
done
# turn OFF debug mode
set +x
ls
# more commands
You can replace standard
#!/bin/bash
with (for debugging)
#!/bin/bash -xv
Method # 3: Use of intelligent DEBUG function
Add special variable _DEBUG. Set to `on¡¯ when you need to debug a script:
_DEBUG="on"
Put the following function at the beginning of the script:
function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@ || :
}
Now wherever you need debugging simply use DEBUG function
DEBUG echo "File is $filename"
OR
DEBUG set -x
Cmd1
Cmd2
DEBUG set +x
When debugging done and before moving a script to production set _DEBUG to off
No need to delete debug lines.
_DEBUG="off" # set to anything but not to 'on'
Sample script:
#!/bin/bash
_DEBUG="on"
function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@ || :
}
DEBUG echo 'Reading files'
for i in *
do
grep 'something' $i > /dev/null
[ $? -eq 0 ] && echo "Found in $i file" || :
done
DEBUG set -x
a=2
b=3
c=$(( $a + $b ))
DEBUG set +x
echo "$a + $b = $c"
Save and run the script:
$ ./script.sh
Output:
Reading files
Found in xyz.txt file
+ a=2
+ b=3
+ c=5
+ DEBUG set +x
+ '[' on == on ']'
+ set +x
2 + 3 = 5
Now set DEBUG to off
_DEBUG="off"
Run script:
$ ./script.sh
Output:
Found in xyz.txt file
2 + 3 = 5
Above is a simple but quite effective technique. You can also try to use DEBUG as an alias instead of function.
À´×Ô£ºlinux.chinaunix.net 1
ÔÚLinuxÖеIJ»Éٽű¾¶¼Ê¹ÓÃÁË
set -e
µ±Ò»¸öÃüÁî²»³É¹¦£¬¼´ $? != 0 ʱ
(²»°üÀ¨ command || true, [[ $? != 0 ]] µÈ )
½Å±¾¾Í»áÍ˳ö
ÕâÊǶԳÌÐò¾«È·¿ØÖƵÄÒªÇó
±ÜÃâһЩÏȾöÌõ¼þ²»³ä·Ö¶øµ¼Öºó±ßÃüÁîµÄÎó²Ù×÷
2
knoppixµÄ¿ª»úÒýµ¼³ÌÐòÓÐÓÐdebugµ÷ÊÔ¹¦ÄÜ
´óÖÂÈçÏÂʵÏÖ
( ÔÚij¸öÐèÒªÖжϴ¦µÄ´úÂëÖÐ ... )
grep -wq debug /proc/cmdline && /bin/sh
µ±È»Èç¹ûÏëÔÚµ÷ÊÔµÄshÖп´µ½Äã³ÌÐòÖеıäÁ¿
ÐèÒª export ±äÁ¿Ãû sourceforge ÉÏÓиö±È½ÏÇ¿µÄ bash debugger: [url=http://bashdb.sourceforge.net/]bashdb[/url], Ó÷¨¸ú gdb ºÍ perldb ÀàËÆ
--
°¢ÁÁµÄÇ©ÃûÔÚ firefox ÀïÃæÔõôÊÇÊú×ÅÏÔʾµÄ? [quote=dearvoid;569180]sourceforge ÉÏÓиö±È½ÏÇ¿µÄ bash debugger: [URL="http://bashdb.sourceforge.net/"]bashdb[/URL], Ó÷¨¸ú gdb ºÍ perldb ÀàËÆ
--
°¢ÁÁµÄÇ©ÃûÔÚ firefox ÀïÃæÔõôÊÇÊú×ÅÏÔʾµÄ?[/quote]
ÂÛ̳ģ°åÎÊÌâ:( [QUOTE=dearvoid;569180]sourceforge ÉÏÓиö±È½ÏÇ¿µÄ bash debugger: [url=http://bashdb.sourceforge.net/]bashdb[/url], Ó÷¨¸ú gdb ºÍ perldb ÀàËÆ
--
°¢ÁÁµÄÇ©ÃûÔÚ firefox ÀïÃæÔõôÊÇÊú×ÅÏÔʾµÄ?[/QUOTE]
ºÇ£¬perldbÕæ²»ÊÇÒ»°ãÈËÓõÄ
ÎÒ»¹ÊÇϰ¹ßʹÓÃprint, echoÀ´¿´ÔËÐÐÇé¿ö
ÁíÍâÎÞÈËÊØÖµµÄ½Å±¾ÔÚÔËÐÐʱ¶à´òӡһЩÐÅÏ¢
È»ºó¼Ç¼ STDOUT, STDERRÊǸö²»´íµÄÖ÷Òâ ÎÒϰ¹ßÁËͼÐλ¯debug£¬F11,F10 Ö®ÀàµÄ°´¼ü
Ò³:
[1]