آموزش دیباگ با pdb در پایتون

زمان مطالعه: 10 دقیقه ویرایش: 1401/10/14

معرفی pdb :

ممکنه برای شماهم پیش اومده باشه که تو کدنویسی جایی به مشکل میخورید که نمیدونید مشکل از کجاست.پس نیاز دارید برنامه رو خط به خط اجرا کنید. این کار برای 10 خط کد آسونه، اما وقتی برنامه ای مینویسید که صد ها خط کد داره نیاز دارید خود پایتون کدتون رو تریس ( trace ) کنه. خوشبختانه پایتون به صورت پیشفرض ماژولی تحت عنوان pdb داره که این کار رو انجام میده.

 


trace کردن با pdb :

برای مثال ما همچین کدی داریم (مطمئنا تو همچین کدی به باگ پیچیده ای نمیخوریم اما میشه اون رو تریس کرد)

num1 = int(input("type your first number"))

num2 = int(input("type your second number"))

sum = num1+num2

print(f"sum is {sum}")

حالا برای رفتن تو حالت trace این دو خط رو ابتدای برناممون اضافه میکنیم :

import pdb

pdb.set_trace()

حالا با اجرای کدمون همچین چیزی رو میبینیم :

> e:\python\learnpy\debug.py(5)<module>()     
-> num1 = int(input("type your first number"))
(Pdb) 

حالا با وارد کردن l میتونیم لیست خطوط رو ببینیم  :

  1     import pdb
  2
  3     pdb.set_trace()
  4
  5  -> num1 = int(input("type your first number"))
  6     num2 = int(input("type your second number"))
  7     sum = num1+num2
  8     print(f"sum is {sum})

اگر میخواهیم به مرحله بعد بریم باید n رو وارد کنیم :

(Pdb) n
type your first number

حالا عددمون (مثلا 3) رو وارد میکنیم :

type your first number3
> e:\python\learnpy\debug.py(6)<module>()
-> num2 = int(input("type your second number"))

به همین ترتیب میتونیم با n پیش بریم.

اما اگه میخواهیم برنامه به صورت معمولی ادامه پیدا کنه (و دیگه trace نشه) :

(Pdb) c
type your second number4
sum is 7
PS E:\python>

به این ترتیب برنامه به روال معمولش برمیگرده و اجرا میشه. اما اگر بخواهیم در میان دیباگ کردن برنامه مقدار یک متغیر رو ببینیم :

(Pdb) n
type your first number3
> e:\python\learnpy\debug.py(6)<module>()
-> num2 = int(input("type your second number"))
(Pdb) p num1
3

میبینم که با استفاده از p و نام متغیر(num1) مقدارش (3) برای ما چاپ میشه.

 


دیباگ یک محدوده :

فرض کنید یک کد چندصد خطی داریم که میخواهیم فقط از خط 100 تا 120 را دیباگ کنیم.

برای اینکار باید به این صورت عمل کنیم :

line 1 : import pdb

.

.

.

line 99 : pdb.set_trace()

.

.

.

line 121: breakpoint()

به این صورت دیباگ از بعد از خط 99 آغاز و بعد از خط 121 تمام میشود.


دیباگ یک فانکشن :

اگر بخواهیم درون یک تابع تریس و دیباگ انجام بدیم روش کار به چه شکلی است ؟ :

def sum():

    import pdb; pdb.set_trace()

    result = a+b+c+d

    return result

print(sum(1,2,3,4)

تمامی نکات بالا درباره دیباگ تابع هم قابل اجراست.

...

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

 

 



3
user نوشته شده توسط محمدصدرا عبدالعلی زاده من صدرام ! برنامه نویسی دوست دارم :) درباره پایتون، جنگو و... یه چیزایی بلدم ;)


دیدگاه


برای ثبت دیدگاه، وارد شوید