เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | Contents | ถัดไป>

การติดตาม

บั๊กมักเป็นกรณีของโฟลว์ตรรกะที่ไม่คาดคิดภายในสคริปต์ กล่าวคือ บางส่วนของสคริปต์ไม่เคยถูกดำเนินการ หรือถูกดำเนินการในลำดับที่ผิดหรือในเวลาที่ไม่ถูกต้อง ในการดูโฟลว์จริงของโปรแกรม เราใช้เทคนิคที่เรียกว่า การติดตาม.

วิธีการติดตามวิธีหนึ่งเกี่ยวข้องกับการวางข้อความข้อมูลในสคริปต์ที่แสดงตำแหน่งของการดำเนินการ เราสามารถเพิ่มข้อความในส่วนโค้ดของเราได้:



echo "กำลังเตรียมลบไฟล์" >&2

ถ้า [[ -d $dir_name ]]; แล้วถ้า cd $dir_name; แล้ว

echo "กำลังลบไฟล์" >&2

rm *

อื่น

echo "ไม่สามารถ cd เป็น '$dir_name'" >&2 ออก 1

fi อื่น

echo "ไม่มีไดเรกทอรีดังกล่าว: '$dir_name'" >&2 ออก 1

fi

echo "การลบไฟล์เสร็จสิ้น" >&2

echo "กำลังเตรียมลบไฟล์" >&2

ถ้า [[ -d $dir_name ]]; แล้วถ้า cd $dir_name; แล้ว

echo "กำลังลบไฟล์" >&2

rm *

อื่น

echo "ไม่สามารถ cd เป็น '$dir_name'" >&2 ออก 1

fi อื่น

echo "ไม่มีไดเรกทอรีดังกล่าว: '$dir_name'" >&2 ออก 1

fi

echo "การลบไฟล์เสร็จสิ้น" >&2


เราส่งข้อความไปยังข้อผิดพลาดมาตรฐานเพื่อแยกข้อความออกจากเอาต์พุตปกติ นอกจากนี้เรายังไม่เยื้องบรรทัดที่มีข้อความ ดังนั้นจึงง่ายต่อการค้นหาเมื่อถึงเวลาต้องย้ายใหม่

เมื่อเรียกใช้สคริปต์แล้ว จะเห็นว่าการลบไฟล์ได้ดำเนินการเสร็จสิ้นแล้ว:



[me@linuxbox ~]$ deletion-script กำลังเตรียมที่จะลบไฟล์ที่กำลังลบไฟล์

การลบไฟล์เสร็จสมบูรณ์ [me@linuxbox ~]$

[me@linuxbox ~]$ deletion-script กำลังเตรียมที่จะลบไฟล์ที่กำลังลบไฟล์

การลบไฟล์เสร็จสมบูรณ์ [me@linuxbox ~]$


bash ยังจัดเตรียมวิธีการติดตาม ใช้งานโดยตัวเลือก -x และคำสั่ง set พร้อมตัวเลือก -x เมื่อใช้สคริปต์ปัญหาก่อนหน้า เราสามารถเปิดใช้งานการติดตามสำหรับสคริปต์ทั้งหมดโดยเพิ่มตัวเลือก -x ลงในบรรทัดแรก:


#!/bin/bash -x

#!/bin/bash -x

การแก้จุดบกพร่อง


# ปัญหา: สคริปต์เพื่อแสดงข้อผิดพลาดทั่วไป number=1

ถ้า [ $number = 1 ]; แล้ว

echo "จำนวนเท่ากับ 1" อื่น

echo "จำนวนไม่เท่ากับ 1"

fi

# ปัญหา: สคริปต์เพื่อแสดงข้อผิดพลาดทั่วไป number=1

ถ้า [ $number = 1 ]; แล้ว

echo "จำนวนเท่ากับ 1" อื่น

echo "จำนวนไม่เท่ากับ 1"

fi


เมื่อดำเนินการแล้ว ผลลัพธ์จะมีลักษณะดังนี้:



[me@linuxbox ~]$ ปัญหา

+ จำนวน=1

+ '[' 1 = 1 ']'

+ echo 'จำนวนเท่ากับ 1' จำนวนเท่ากับ 1

[me@linuxbox ~]$ ปัญหา

+ จำนวน=1

+ '[' 1 = 1 ']'

+ echo 'จำนวนเท่ากับ 1' จำนวนเท่ากับ 1


เมื่อเปิดใช้งานการติดตาม เราจะเห็นคำสั่งที่ดำเนินการกับส่วนขยายที่ใช้ เครื่องหมายบวกชั้นนำแสดงถึงการแสดงร่องรอยเพื่อแยกความแตกต่างจากเส้นของเอาต์พุตปกติ เครื่องหมายบวกเป็นอักขระเริ่มต้นสำหรับเอาต์พุตการติดตาม มันมีอยู่ใน PS4 (พร้อมท์สตริง 4) ตัวแปรเชลล์ เนื้อหาของตัวแปรนี้สามารถปรับเปลี่ยนเพื่อให้พรอมต์มีประโยชน์มากขึ้น ที่นี่ เราแก้ไขเนื้อหาของตัวแปรเพื่อรวมหมายเลขบรรทัดปัจจุบันในสคริปต์ที่ดำเนินการติดตาม โปรดทราบว่าต้องใช้เครื่องหมายคำพูดเดี่ยวเพื่อป้องกันการขยายจนกว่าจะใช้พรอมต์จริง:



[me@linuxbox ~]$ ส่งออก PS4='$LINENO + '

[me@linuxbox ~]$ ปัญหา

5 + ตัวเลข=1

7 + '[' 1 = 1 ']'

8 + echo 'จำนวนเท่ากับ 1' จำนวนเท่ากับ 1

[me@linuxbox ~]$ ส่งออก PS4='$LINENO + '

[me@linuxbox ~]$ ปัญหา

5 + ตัวเลข=1

7 + '[' 1 = 1 ']'

8 + echo 'จำนวนเท่ากับ 1' จำนวนเท่ากับ 1


ในการดำเนินการติดตามในส่วนที่เลือกของสคริปต์ แทนที่จะใช้สคริปต์ทั้งหมด เราสามารถใช้ เซ็ต สั่งกับ -x ตัวเลือก:


#! / bin / ทุบตี

# ปัญหา: สคริปต์เพื่อแสดงข้อผิดพลาดทั่วไป number=1

#! / bin / ทุบตี

# ปัญหา: สคริปต์เพื่อแสดงข้อผิดพลาดทั่วไป number=1



set -x # เปิดการติดตาม

ถ้า [ $number = 1 ]; แล้ว

echo "จำนวนเท่ากับ 1" อื่น

echo "จำนวนไม่เท่ากับ 1"

fi

set +x # ปิดการติดตาม


set -x # เปิดการติดตาม

ถ้า [ $number = 1 ]; แล้ว

echo "จำนวนเท่ากับ 1" อื่น

echo "จำนวนไม่เท่ากับ 1"

fi

set +x # ปิดการติดตาม


เราใช้ เซ็ต สั่งกับ -x ตัวเลือกเพื่อเปิดใช้งานการติดตามและ +x ตัวเลือกในการปิดใช้งานการติดตาม เทคนิคนี้สามารถใช้เพื่อตรวจสอบปัญหาได้หลายส่วน - บางสคริปต์


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: