دیباگ کد های پایتونی چطوریه؟

vector freepik.com
vector freepik.com


یکی از چیزایی که تو آموزش های برنامه نویسی خیلی کم بهش اشاره میشه دیباگینگ (مشکل یابی) هست. مخصوصا تو پایتون! چون توی اکثر آموزش ها مدرس کد رو بدون مشکل مینویسه و ما اونو به خاطر میسپاریم. حالا اگه یه کد جدیدی بنویسیم و تعداد خط هامون زیاد بشه، ما مشکل رو به راحتی پیدا نمی‌کنیم. اینجور موقع ها اکثر ما یه حرکت ابتکاری میزنیم؛ پرینت! بله ما میایم چند تا پرینت میزاریم تا مقدار متغیر ها و جاهایی که اجرا میشه یا نمیشه رو پرینت می‌کنیم. حالا الان میخوایم با ماژول درون‌ساخته‌شده!(built-in) pdb آشنا بشیم.


برای پایتون ۳.۷ و بالاتر میتونید از breakpoint استفاده کنیم.


  • خب تنها کاری که باید بکنیم اینه که ماژول pdb رو import کنیم و متد set_trace رو صدا بزنیم
import pdb
pdb.set_trace()

اینطوری هم میتونید بنویسید

import pdb; pdb.set_trace()

یه مثال هم ببینیم

import pdb
def squared(a):
    pdb.set_trace()
    b = a**2
    return b 
print(squared(4))


# Python 3.7 on above
def squared(a):
   breakpoint()
    b = a**2
    return b 
print(squared(4))

وقتی برنامه به set_trace برسه، برنامه میره رو حالت interactive. شما میتونید خط به خط اجرا رو زیر نظر بگیرید.

--Return--
> <ipython-input-1-d60c9f892b57>(3)<module>()->None
-> pdb.set_trace()
(Pdb) 

شما اینجا چندتا کامنت میتونید استفاده کنید. سعی میکنم مهم هاشو بگم.

c: trace رو ادامه میده

q: خارج میشه

s: میره مرحله(خط) بعدی

n: اگه به یه تابع ای برسه اونو trace نمیکنه


روش های دیگه ای هم هستن که دیگه نیاز نیست سورس کد رو تغییر بدیم. چندتاشو این پایین میزارم.

import pdb
import mymodule
pdb.run('mymodule.test()')


python3 -m pdb myscript.py

در آخر توجه داشته باشید که دیباگ همون تست نیست! ما تست مینویسیم تا مطمئن بشیم برنامه درست کار میکنه. و اگه درست کار نکرد میریم سراغ دیباگ.

اگه دنبال اطلاعات بیشتر میگردید به داکیومنتیشن کتابخونه سر بزنید.

https://docs.python.org/3/library/pdb.html