সফ্টওয়্যার ডেভেলপমেন্ট জার্গনে, 'ডিবাগিং' শব্দটি জনপ্রিয়ভাবে একটি প্রোগ্রামে ত্রুটি সনাক্তকরণ এবং সংশোধন করার প্রক্রিয়ার জন্য ব্যবহৃত হয়। পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে পিডিবি মডিউল রয়েছে যা পাইথন প্রোগ্রামগুলির ডিবাগিংয়ের জন্য ইউটিলিটিগুলির একটি সেট৷
ডিবাগিং কার্যকারিতা একটি Pdb ক্লাসে সংজ্ঞায়িত করা হয়। মডিউলটি অভ্যন্তরীণভাবে বিডিবি এবং সিএমডি মডিউল ব্যবহার করে।
pdb মডিউলটির একটি খুব সুবিধাজনক কমান্ড লাইন ইন্টারফেস রয়েছে। এটি পাইথন স্ক্রিপ্ট কার্যকর করার সময় –m সুইচ ব্যবহার করে আমদানি করা হয়
python –m pdb script.py
ডিবাগার কীভাবে কাজ করে সে সম্পর্কে আরও জানতে, আসুন প্রথমে নিম্নোক্তভাবে একটি পাইথন মডিউল (fact.py) লিখি -
def fact(x):f =1 in range(1,x+1):প্রিন্ট (i) f =f * i রিটার্ন fif __name__=="__main__":print ("factorial of 3=" ,তথ্য(3))
কমান্ড লাইন থেকে এই মডিউলটি ডিবাগ করা শুরু করুন। এই ক্ষেত্রে এক্সিকিউশনটি কোডের প্রথম লাইনে তার বাম দিকে তীর (->) দেখিয়ে এবং ডিবাগার প্রম্পট (Pdb) তৈরি করে থামে
C:\python36>python -m pdb fact.py> c:\python36\fact.py(1)()-> def fact(x):(Pdb)
সমস্ত ডিবাগার কমান্ডের তালিকা দেখতে ডিবাগার প্রম্পটের সামনে 'হেল্প' টাইপ করুন। যেকোনো কমান্ড সম্পর্কে আরও জানতে 'help
তালিকা কমান্ড সম্পূর্ণ কোড তালিকাভুক্ত করে -> একটি লাইনের বাম দিকে যেখানে প্রোগ্রাম থামানো হয়েছে।
(Pdb) list1 -> def fact(x):2 f =13 রেঞ্জে i এর জন্য(1,x+1):4 প্রিন্ট (i)5 f =f * i6 রিটার্ন f7 যদি __name__=="__main__ ":8 প্রিন্ট ("3 এর ফ্যাক্টরিয়াল =", ফ্যাক্ট(3))
প্রোগ্রাম লাইন বাই লাইনের মধ্য দিয়ে যেতে ধাপ বা পরবর্তী কমান্ড ব্যবহার করুন।
(Pdb) ধাপ> c:\python36\fact.py(7)()-> if __name__=="__main__":(Pdb) next> c:\python36\fact.py(8) ()-> প্রিন্ট ("3 এর ফ্যাক্টরিয়াল =", ফ্যাক্ট(3))(Pdb) নেক্সট123ফ্যাক্টোরিয়াল অফ 3=6--রিটার্ন--> c:\python36\fact.py(8) ( ->কোনটি নয়-> প্রিন্ট ("3 এর ফ্যাক্টরিয়াল =", ফ্যাক্ট(3))
ধাপ এবং পরবর্তী কমান্ডের মধ্যে প্রধান পার্থক্য হল ধাপ কমান্ড একটি ফাংশনের মধ্যে একটি প্রোগ্রামকে থামিয়ে দেয় যখন পরবর্তী কমান্ড একটি নামক ফাংশন চালায় এবং এটির পরে স্টপ করে।
C:\python36>python -m pdb fact.py> c:\python36\fact.py(1)()-> def fact(x):(Pdb) s> c:\python36\ fact.py(7) ()-> if __name__=="__main__":(Pdb) n> c:\python36\fact.py(8) ()-> প্রিন্ট ("3 এর ফ্যাক্টরিয়াল) =",fact(3))(Pdb) s--Call--> c:\python36\fact.py(1)fact()-> def fact(x):(Pdb) n> c:\python36\ fact.py(2)fact()-> f =1(Pdb) n> c:\python36\fact.py(3)fact()-> i এর জন্য রেঞ্জ(1,x+1):(Pdb) n> c:\python36\fact.py(4)fact()-> print (i)(Pdb) n1> c:\python36\fact.py(5)fact()-> f =f * i(Pdb) ) n> c:\python36\fact.py(3)fact()-> i এর জন্য রেঞ্জ(1, x + 1):(Pdb) n> c:\python36\fact.py(4)fact() -> প্রিন্ট (i)(Pdb) f,i(1, 2)(Pdb)
স্টেপ কমান্ডটি --call—ইঙ্গিত দেখায় যখন একটি প্রোগ্রাম ফাংশনের জন্য একটি কলের সম্মুখীন হয় এবং একটি ফাংশন শেষ হলে --return--- যেকোন সময়ে, আমরা একটি নির্দিষ্ট ভেরিয়েবলের মান শুধুমাত্র তার নাম লিখে পরীক্ষা করতে পারি।
আপনি ব্রেক কমান্ডের মাধ্যমে একটি প্রোগ্রামের মধ্যে ব্রেকপয়েন্ট সেট করতে পারেন। লাইন নম্বর (যেখানে ব্রেকপয়েন্ট সেট করা উচিত) দিতে হবে। উদাহরণস্বরূপ 'ব্রেক 5' একটি বর্তমান প্রোগ্রামের লাইন 5 এ একটি ব্রেকপয়েন্ট সেট করবে।
(Pdb) তালিকা2 f =13 রেঞ্জে i এর জন্য (1, x + 1):4 প্রিন্ট (i)5 f =f * i6 ফেরত f7 -> যদি __name__=="__main__":8 প্রিন্ট ("ফ্যাক্টরিয়াল) of 3=",fact(3))[EOF](Pdb) ব্রেক 5ব্রেকপয়েন্ট 1 এ c:\python36\fact.py:5(Pdb) continue1> c:\python36\fact.py(5)fact()-> f =f * i(Pdb) breakNum Type Disp Enb যেখানে1 ব্রেকপয়েন্টে হ্যাঁ রাখুন -> f =f * i(Pdb) bNum Type Disp Enb যেখানে 1 ব্রেকপয়েন্ট yes এ c:\python36\fact.py:5breakpoint ইতিমধ্যে 2 বার আঘাত করেছে
'কন্টিনিউ' কমান্ড জারি করা হলে, ব্রেকপয়েন্টের সম্মুখীন না হওয়া পর্যন্ত প্রোগ্রাম এক্সিকিউশন চলবে। সমস্ত ব্রেকপয়েন্ট প্রদর্শন করতে, লাইন নম্বর ছাড়াই সাধারণ সমস্যা ব্রেক কমান্ড।
যেকোনো ব্রেকপয়েন্ট নিষ্ক্রিয়/সক্ষম কমান্ড দ্বারা নিষ্ক্রিয়/সক্ষম করা যেতে পারে বা পরিষ্কার কমান্ডের মাধ্যমে সম্পূর্ণরূপে সাফ করা যেতে পারে।
(Pdb) c:\python36\fact.py:5(Pdb) bNum Type Disp Enb এ 1 নিষ্ক্রিয় ব্রেকপয়েন্ট 1 অক্ষম করুন যেখানে c:\python36\fact.py:5ব্রেকপয়েন্ট 2 বার হিট হয়েছে।>Pdb ডিবাগার Python স্ক্রিপ্টের মধ্যে থেকেও ব্যবহার করা যেতে পারে। এটি করতে, স্ক্রিপ্টের শীর্ষে pdb আমদানি করুন এবং প্রোগ্রামের ভিতরে set_trace() পদ্ধতি ব্যবহার করুন৷
ইম্পোর্ট করুন pdbdef fact(x):f =1 এর জন্য i রেঞ্জে(1,x+1):pdb.set_trace()print (i)f =f * ireturn fif __name__=="__main__":print ("ফ্যাক্টোরিয়াল) 3=",তথ্য(3))ডিবাগারের আচরণ হুবহু একই রকম হবে যেভাবে আমরা কমান্ড লাইন পরিবেশে পাই।