ดีบัก Python Like a Hero ด้วยไลบรารี่และเครื่องมือเหล่านี้

เผยแพร่แล้ว: 2022-06-26

คุณต้องการที่จะเป็นผู้เชี่ยวชาญด้านการดีบัก Python ตัวจริงหรือไม่? ดีบักโค้ด Python ของคุณโดยใช้เครื่องมือแก้ไขข้อบกพร่อง Python ที่น่าทึ่งและไลบรารี่ที่เราจะกล่าวถึงในเร็วๆ นี้!

Python เป็นภาษาโปรแกรมสำหรับวัตถุประสงค์ทั่วไป ระดับสูง และเชิงวัตถุ ใช้เพื่อวัตถุประสงค์ในการพัฒนาหลายอย่าง นอกจากนี้ยังเป็นเครื่องมือพัฒนาที่มีประสิทธิภาพสำหรับแอปพลิเคชันต่างๆ ตั้งแต่การพัฒนาเว็บแอปพลิเคชันไปจนถึงการขูดเว็บและแอปพลิเคชันที่ซับซ้อนมากขึ้น เช่น การเรียนรู้ของเครื่องและวิทยาศาสตร์ข้อมูล

ในระหว่างการพัฒนา มักจะเกิดข้อผิดพลาดที่เรียกว่าบั๊กในการเขียนโปรแกรม นักพัฒนาใช้หลายขั้นตอนในการตรวจจับและกำจัดจุดบกพร่องที่มีอยู่และที่อาจเกิดขึ้นจากโค้ด เป็นผลให้คุณป้องกันไม่ให้รหัสโปรแกรมบีบอัด เราเรียกกระบวนการนี้ว่าการดีบัก

บทความนี้จะกล่าวถึงดีบักเกอร์ Python ที่มีอยู่หลายตัวที่คุณสามารถใช้ได้ นอกจากนี้เรายังจะเห็นว่าดีบักเกอร์เหล่านี้แตกต่างกันอย่างไรและอะไรที่ทำให้การใช้งานของพวกเขามีประสิทธิภาพ

ไลบรารีการดีบัก cProfiler

cProfiler เป็นไลบรารียอดนิยมและส่วนขยาย C ที่ดำเนินการสร้างโปรไฟล์ของโค้ดที่ใช้งานได้ยาวนาน ในระยะยาว จะระบุส่วนของรหัสโปรแกรมที่ใช้เวลานานในการทำงาน แม้ว่าจะระบุเวลาที่แม่นยำในการเรียกใช้ส่วนต่างๆ ของโค้ด แต่ก็ไม่ได้ระบุหรือแก้ไขข้อบกพร่องในโค้ดทั้งหมด

ดังนั้น ความจำเป็นในการใช้ดีบักเกอร์อื่นๆ จึงเกิดขึ้น

โชคดีที่คุณสามารถใช้ไลบรารีที่แนะนำ เช่น ipdb, Django-debug-toolbar, pyelftools, viztracer และ py-spy เป็นเครื่องมือดีบักสำหรับโค้ด Python ของคุณแทน

เครื่องมือดีบัก ipdb

Python Debugger ที่เปิดใช้งาน IPython แบบเต็มคือดีบักเกอร์บุคคลที่สามแบบโต้ตอบที่มีฟังก์ชันการทำงานของ pdb Ipbd มาพร้อมกับการสนับสนุนเชลล์ IPython แบบโต้ตอบ การสนับสนุนดังกล่าวรวมถึงการเติมแท็บให้สมบูรณ์ การสนับสนุนสี และฟังก์ชันมายากล รวมถึงคุณลักษณะการสนับสนุนอื่นๆ

ดีบักนี้ช่วยให้สามารถเข้าถึงตัวดีบัก IPython โดยการส่งออกฟังก์ชันที่เกี่ยวข้อง นอกจากนี้ยังมีอินเทอร์เฟซที่คล้ายกันเพื่อการวิปัสสนาที่ดีขึ้น เช่นเดียวกับในโมดูล pdb

การดีบักด้วย Ipdb

ไลบรารีต้องการการติดตั้งโดยใช้คำสั่ง pip ด้านล่าง

 pip install ipdb

ตัวอย่างของการใช้ ipdb จะมีลักษณะดังนี้:

 import ipdb alpha_list = ['a', 'b', 'c'] fruit_list = ['orange', 'mango', 'kiwi'] def nested_loop(): for fruit_list: print (fruit) ipdb.set_trace() for x in alpha_list: print(x) if __name__ == '__main__': nested_loop()

เรียกใช้ไฟล์ python โดยใช้คำสั่งด้านล่างโดยที่ test.py เป็นชื่อไฟล์ของฉัน:

 python -m ipdb test.py

ipdb นำเข้าและเรียกใช้ ipdb.set_trace() อนุญาตให้เริ่มต้นโปรแกรมและรันโปรแกรมดีบั๊กผ่านการดำเนินการ

ipdb.pm() (ชันสูตรพลิกศพ) ทำหน้าที่คล้ายกับ %debug magic function

อาร์กิวเมนต์ set_trace

ส่งบริบทเป็นอาร์กิวเมนต์ไปยัง set_trace เพื่อแสดงโค้ดหลายบรรทัดที่กำหนดไว้ นอกจากนี้ cond ซึ่ง set_trace ยังยอมรับเป็นอาร์กิวเมนต์ ยอมรับค่าบูลีน และเริ่มอินเทอร์เฟซ ipdb เมื่อคุณตั้งค่า cond true

การใช้ไฟล์กำหนดค่า

ตั้งค่าอาร์กิวเมนต์บริบทด้วยไฟล์ idpdb หรือไฟล์ setup.cfg ที่มีอยู่ในโฮมโฟลเดอร์และโฟลเดอร์โปรเจ็กต์ตามลำดับ คุณสามารถตรวจสอบการทำงานของ ipdb เพิ่มเติมได้

แถบเครื่องมือแก้ไขข้อบกพร่อง Django

แถบเครื่องมือดีบัก Django เป็นเครื่องมือดีบั๊กยอดนิยมใน Django: เฟรมเวิร์ก Python

ชุดแผงที่กำหนดค่าได้นี้จะแสดงคำขอปัจจุบันหรือข้อมูลการแก้ไขข้อบกพร่องของการตอบกลับ เมื่อคุณคลิกแถบเครื่องมือ รายละเอียดเพิ่มเติมเกี่ยวกับเนื้อหาของแผงจะปรากฏขึ้น

เครื่องมือนี้จะตรวจสอบสภาพแวดล้อมการพัฒนา Django อย่างละเอียด

ปฏิบัติตามขั้นตอนการติดตั้งและคำแนะนำการกำหนดค่าที่นี่

ห้องสมุด Pyelftools

ไลบรารี pyelftools สร้างขึ้นบน Python ล้วนๆ มันแยกวิเคราะห์และวิเคราะห์ไฟล์ ELF และข้อมูลการดีบัก DWARF และต้องใช้ Python เท่านั้นในการทำงาน

การใช้ Pyelftools เป็นเรื่องง่ายเนื่องจากไม่มีไลบรารีภายนอก นอกจากนี้ การใช้ pyelftools โดยไม่ต้องติดตั้งนั้นค่อนข้างง่าย เนื่องจากเพียงแค่ต้องปรับ PYTHONPATH ในตัวแปรสภาพแวดล้อม

คุณจะติดตั้งโดยใช้:

 pip install pyelftools

การใช้งาน pyelftools เพียงแค่ต้องนำเข้าและเรียกใช้ในโปรแกรมของคุณ

เครื่องมือแก้จุดบกพร่องไอศครีม

นี่เป็นอีกหนึ่งเครื่องมือดีบั๊กที่มีประสิทธิภาพสำหรับนักพัฒนา Python

การใช้ icecream เช่นกัน ic() มีประโยชน์มากกว่า print() ดังที่อธิบายไว้ด้านล่าง:

  • การพิมพ์ค่อนข้างเร็วกว่าอย่างแท้จริง
  • มันพิมพ์โครงสร้างข้อมูลได้ค่อนข้างดี
  • พิมพ์นิพจน์หรือชื่อตัวแปรและค่าด้วย ic()
  • มันเน้นไวยากรณ์ของผลลัพธ์
  • รวมถึงบริบทของโปรแกรม รวมถึงชื่อไฟล์ หมายเลขบรรทัด และฟังก์ชันพาเรนต์

ก่อนใช้แพ็คเกจนี้ ให้ติดตั้งโดยใช้คำสั่ง pip ด้านล่าง:

 pip install icecream

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

ในไฟล์ root python ไฟล์แรกของคุณ ซึ่งคุณสามารถตั้งชื่อ x.py ได้ ให้เพิ่ม ic() โดยใช้ install()

 from icecream import install install() from y import mult mult()

ในไฟล์ y.py ไฟล์ x.py กำลังนำเข้า เรียก ic()

 def mult(): z=8 ic(z)

ผลลัพธ์:

 y ic| z : 8

สิ่งที่ทำให้ ic() มีประสิทธิภาพมากขึ้นคือความสามารถในการตรวจสอบตัวแปรที่ส่งผ่าน รวมถึงตัวมันเอง จากนั้นพิมพ์อาร์กิวเมนต์และค่าอาร์กิวเมนต์ตามตัวอย่างต่อไปนี้

 from icecream import ic def mult(x): return x * 4 ic(mult(100))

เอาท์พุท:

 ic| mult(100): 400

ยิ่งไปกว่านั้น คุณสามารถแทรก ic() ลงในโค้ดที่มีอยู่ก่อนได้เนื่องจากจะส่งคืนอาร์กิวเมนต์ ตัวอย่างด้านล่างส่งคืน ic| x: 12 ic| x: 12 จากนั้น ic| y: 48ic| y: 48 .

 from icecream import ic x = 12 def mult(x): return x*4 y = mult(ic(x)) ic(y)

การดีบักโดยใช้เครื่องมือ py-spy

คุณสามารถใช้ py-spy เพื่อสร้างโปรไฟล์ตัวอย่างสำหรับโปรแกรม Python เป็นเครื่องมือในการดีบัก โดยไม่ต้องรีสตาร์ทโปรแกรมหรือแก้ไขโค้ดโปรแกรม py-spy จะแสดงภาพการทำงานของโปรแกรม Python ยิ่งไปกว่านั้น เนื่องจากมันเขียนด้วยภาษาสนิม มันจึงมีค่าใช้จ่ายที่ต่ำ

นอกจากนี้ ควรพิจารณาว่าการใช้ py-spy กับโค้ด Python ที่ใช้งานจริงนั้นปลอดภัย เพราะมันรันกระบวนการที่แตกต่างจากโปรแกรม Python ที่ทำโปรไฟล์

เช่นเดียวกับเครื่องมืออื่น ๆ ก่อนหน้านี้ที่เราเคยเห็น คุณสามารถใช้เครื่องมือ py-spy หลังจากติดตั้ง

 pip install py-spy

แม้ว่าโปรแกรม Python ของคุณจะให้บริการปริมาณการใช้งานจริง คุณยังคงสามารถสร้างโปรไฟล์และดีบักโปรแกรมนี้ได้โดยใช้ py-spy ทำให้เป็นเครื่องมือสร้างโปรไฟล์ Python ที่สำคัญ

ดีบักเกอร์ Viztracer

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

อะไรทำให้ viztracer เป็นเครื่องมือแก้ไขข้อบกพร่องที่มีประสิทธิภาพ

  • การใช้งานนั้นค่อนข้างง่าย และไม่ต้องพึ่งแพ็คเกจภายนอกในการทำงาน
  • Viztracer ทำงานบนแพลตฟอร์มระบบปฏิบัติการทั้งหมด: Windows, Linux หรือ macOS
  • ส่วนหน้าอันทรงพลังทำให้ติดตามระดับ GB ได้อย่างราบรื่น
  • ใช้ RegEx เพื่อบันทึกฟังก์ชันที่กำหนดเองและข้อมูลเพิ่มเติม เช่น ตัวแปรและแอตทริบิวต์ ข้อยกเว้นที่เพิ่มขึ้น การดำเนินการ Garbage Collector เป็นต้น โดยไม่ต้องแก้ไขส่วนโค้ดใดๆ ภายในซอร์สโค้ดของคุณ
  • สิ่งที่ทำให้ viztracer เป็นเครื่องมือแก้ไขข้อบกพร่องที่มีค่าใช้จ่ายต่ำคือความสามารถในการกรองข้อมูลที่คุณไม่ต้องการในโปรแกรมของคุณออก จากนั้นจะเก็บข้อมูลเก่าก่อนที่จะดัมพ์บันทึกในรูปแบบ JSON
  • คุณสามารถใช้เพื่อแทรกเหตุการณ์ที่กำหนดเอง เช่น เหตุการณ์ทันที เหตุการณ์ตัวแปร และเหตุการณ์ Duration ขณะที่โปรแกรมทำงาน วิธีนี้ทำงานเหมือนกับการดีบักการพิมพ์ ยกเว้น viztracer จะแจ้งให้คุณทราบเมื่อการพิมพ์เกิดขึ้นในขณะที่คุณติดตามข้อมูล

บทสรุป

การทำโปรไฟล์และการดีบักของ Python เช่นเดียวกับการทำโปรไฟล์ซอฟต์แวร์เป็นขั้นตอนสำคัญในการพัฒนาที่เรียกร้องความสนใจ ขั้นตอนนี้ช่วยแยกแยะส่วนโค้ดที่มีจุดบกพร่องออก เพื่อให้ประสิทธิภาพโดยรวมของโค้ดได้รับการปรับให้เหมาะสม

เครื่องมือแก้ไขข้อบกพร่องที่เรากล่าวถึงข้างต้นเป็นเครื่องมือที่มีประสิทธิภาพที่ทำให้นักพัฒนา Python ทำงานได้ง่าย

เมื่อเห็นว่าเครื่องมือดีบั๊กอื่นๆ ทำงานได้อย่างมีประสิทธิภาพมากกว่า cProfiler คุณก็สามารถดีบักโค้ด Python ของคุณได้อย่างฮีโร่ตัวจริง และแก้ไขจุดบกพร่องใดๆ ที่อาจเกิดขึ้นโดยใช้ตัวดีบั๊กเหล่านี้เพื่อป้องกันไม่ให้โค้ดของคุณทำงานโดยไม่หยุดทำงาน

มีความสุขในการแก้จุดบกพร่อง!