ডিবাগ ইস্যুগুলিতে সহায়তার জন্য পাইথন কোড দিয়ে কীভাবে পদক্ষেপ নেবেন?


184

জাভা / সি # তে আপনি কী কী ভুল হচ্ছে তা সনাক্ত করতে খুব সহজেই কোডের মাধ্যমে পদক্ষেপ নিতে পারেন এবং আইডিই এই প্রক্রিয়াটিকে খুব ব্যবহারকারী বান্ধব করে তোলে।

আপনি কি একই ধরণের পাইথন কোডটি আবিষ্কার করতে পারেন?

উত্তর:


262

হ্যাঁ! একটি পাইথন ডিবাগার আছে pdbকেবল এটি করার জন্য!

বা pdbব্যবহার করে আপনি পাইথন প্রোগ্রাম চালু করতে পারেন ।pdb myscript.pypython -m pdb myscript.py

তারপরে কয়েকটি কমান্ড রয়েছে যা আপনি ইস্যু করতে পারবেন যা pdbপৃষ্ঠায় নথিবদ্ধ ।

কিছু দরকারী মনে রাখবেন:

  • b: একটি ব্রেকপয়েন্ট নির্ধারণ করুন
  • c: আপনি ব্রেকপয়েন্টে চাপ না দেওয়া পর্যন্ত ডিবাগিং চালিয়ে যান
  • s: কোড দিয়ে পদক্ষেপ
  • n: কোড পরবর্তী লাইনে যেতে
  • l: বর্তমান ফাইলের জন্য উত্স কোডের তালিকা তৈরি করুন (ডিফল্ট: 11 টি লাইন কার্যকর করা হচ্ছে সহ)
  • u: একটি স্ট্যাক ফ্রেম নেভিগেট
  • d: একটি স্ট্যাক ফ্রেম নেভিগেট
  • p: বর্তমান প্রসঙ্গে একটি অভিব্যক্তির মান মুদ্রণ করতে

আপনি যদি কমান্ড লাইন ডিবাগারটি ব্যবহার করতে না চান, পাইদেব , উইং আইডিই বা পাইচার্মের মতো কিছু আইডিইতে জিইউআই ডিবাগার রয়েছে। উইং এবং পাইচার্ম বাণিজ্যিক পণ্য, তবে উইংয়ের একটি বিনামূল্যে "ব্যক্তিগত" সংস্করণ রয়েছে এবং পাইচার্মের একটি মুক্ত সম্প্রদায় সংস্করণ রয়েছে।


10
বাহ, আমি বিশ্বাস করতে পারি না আমি লিনাক্স / উবুন্টুর জন্য একটি গ্রাফিকাল পিডিবি খুঁজে পেতে খুব কঠিন সময় কাটাচ্ছি। আমি কিছু অনুপস্থিত করছি? আমাকে এর জন্য সাব্লাইমেক্সট প্লাগইন তৈরি করতে হবে into
থারস্মমনার

4
পাইচার্ম গ্রাফিকাল ডিবাগার হিসাবে বেশ ভাল এবং এর সম্প্রদায় সংস্করণটি নিখরচায়!
পিটার

@ থারস্মমনার, এটির pudbজন্য দুর্দান্ত। এছাড়াওpydev
alpha_989

pdbএকটি কমান্ড লাইন সরঞ্জাম নয়। এটি ব্যবহার করতে, ব্যবহার করুন python -m pdb your_script.py
jdhao

55

পাইথন ইন্টারেক্টিভ ডিবাগার 'পিডিবি' ব্যবহার করে

প্রথম পদক্ষেপটি ডিবাগিং মোডে প্রবেশ করার জন্য পাইথন দোভাষী তৈরি করা।

উ: কমান্ড লাইন থেকে

পাইথন ইন্টারপ্রেটারের কমান্ড লাইন থেকে চলমান বেশ সোজা পথ forward

$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)

বি। দোভাষীর মধ্যে

মডিউলগুলির প্রারম্ভিক সংস্করণগুলি বিকাশ করার সময় এবং এটি আরও পুনরাবৃত্তভাবে পরীক্ষা করার জন্য।

$ python
Python 2.7 (r27:82508, Jul  3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)

সি আপনার প্রোগ্রামের মধ্যে থেকে

একটি বড় প্রকল্প এবং দীর্ঘ-চলমান মডিউলটির জন্য, আমদানি পিডিবি এবং সেট_ট্রেস () এর ব্যবহার করে প্রোগ্রামের অভ্যন্তর থেকে ডিবাগিং শুরু করতে পারেন :

#!/usr/bin/env python
# encoding: utf-8
#

import pdb

class MyObj(object):
    count = 5
    def __init__(self):
        self.count= 9

    def go(self):
        for i in range(self.count):
            pdb.set_trace()
            print i
        return

if __name__ == '__main__':
    MyObj(5).go()

আরও অভ্যন্তরীণ দিকে যেতে ধাপে ধাপে ডিবাগিং

  1. পরবর্তী বিবৃতিটি "এন" (পরবর্তী) দিয়ে কার্যকর করুন

  2. ENTER দিয়ে… শেষ ডিবাগিং কমান্ডটি পুনরাবৃত্তি করা হচ্ছে

  3. "কিউ" দিয়ে (প্রস্থান করুন) সব ছেড়ে চলেছে

  4. ভেরিয়েবলের মান মুদ্রণ করা হচ্ছে ... "পি" দিয়ে (মুদ্রণ)

    ক)

  5. (পিডিবি) প্রম্পটটি বন্ধ করা হচ্ছে ... সাথে "সি" (চালিয়ে যান)

  6. "এল" (তালিকা) সহ আপনি কোথায় আছেন তা দেখে

  7. সাবরুটাইনগুলিতে পদক্ষেপ … "গুলি" দিয়ে (পদক্ষেপে)

  8. অবিরত ... তবে কেবলমাত্র বর্তমান সাবরুটিনের শেষে ... "আর" দিয়ে (প্রত্যাবর্তন)

  9. একটি নতুন মান নির্ধারণ করুন

    ক) ! খ = "বি"

  10. একটি ব্রেকপয়েন্ট সেট করুন

    ক) ব্রেক লিনেনবার

    খ) বিরতি ফাংশন নাম

    গ) ফাইলের নাম বিরতি: লিনেনম্বার

  11. অস্থায়ী ব্রেকপয়েন্ট

    ক) ট্রিব্রাক লিনেনম্বার

  12. শর্তাধীন ব্রেকপয়েন্ট

    ক) ভাঙ্গা লিনেনমার, শর্ত

দ্রষ্টব্য: ** এই সমস্ত কমান্ডগুলি ** পিডিবি থেকে কার্যকর করা উচিত

গভীর জ্ঞানের জন্য, দেখুন: -

https://pymotw.com/2/pdb/

https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/


41

পাইথনে 'পিডিবি' নামে একটি মডিউল রয়েছে। আপনার অজগর স্ক্রিপ্টের শীর্ষে do

import pdb
pdb.set_trace()

এবং আপনি ডিবাগিং মোডে প্রবেশ করবেন। আপনি 'জিডিবি' ডিবাগারটি কী করবেন তার অনুরূপ পরবর্তী পংক্তিতে 's', পদক্ষেপে 'এন' ব্যবহার করতে পারেন।


21

পাইথন ৩.7 থেকে শুরু করে, আপনি breakpoint()ডিবাগারে প্রবেশের জন্য বিল্ট-ইন ফাংশনটি ব্যবহার করতে পারেন :

foo()
breakpoint()  # drop into the debugger at this point
bar()

ডিফল্টরূপে, breakpoint()আমদানি করে pdbএবং কল করবে pdb.set_trace()। তবে আপনি sys.breakpointhook()পরিবেশের পরিবর্তনশীলের মাধ্যমে এবং ডিবাগিং আচরণটি নিয়ন্ত্রণ করতে পারেন PYTHONBREAKPOINT

আরও তথ্যের জন্য পিইপি 553 দেখুন ।


2
আমি যখন দেখেছি breakpointআমি উত্তেজিত ছিলাম। তবে আমি শিখেছি যে এটি মূলত কেবল একটি শর্টকাট import pdb; pdb.set_trace()এবং এটি আমাকে দু: খিত করে। পাইথন ডেভস: অনুগ্রহ করে প্রাসঙ্গিক লাইন,
ধ্রুবক

11

আইপিডিবি (আইপথন ডিবাগার)

ipdb নিম্নলিখিত আইডিথ উন্নততা প্রদান করে আইপিথন কার্যকারিতা যুক্ত করে:

  • ট্যাব সমাপ্তি
  • আরও প্রসঙ্গ লাইন দেখান
  • সিনট্যাক্স হাইলাইট

অনেকটা পিডিজির মতো, জিডিবির তুলনায় আইপিডিবি নিখুঁত এবং সম্পূর্ণ প্রাথমিক থেকে এখনও অনেক দূরে, তবে এটি ইতিমধ্যে পিডিবি-র তুলনায় একটি বিশাল উন্নতি।

ব্যবহারের সাথে সাদৃশ্য রয়েছে pdb, কেবল এটির সাথে এটি ইনস্টল করুন:

python3 -m pip install --user ipdb

এবং তারপরে যে লাইন থেকে আপনি ডিবাগটি সরিয়ে নিতে চান তাতে যুক্ত করুন:

__import__('ipdb').set_trace(context=21)

আপনি সম্ভবত আপনার সম্পাদক থেকে এর জন্য একটি শর্টকাট যুক্ত করতে চান, যেমন আমার কাছে থাকা ভিম স্নিপমেট :

snippet ipd
    __import__('ipdb').set_trace(context=21)

সুতরাং আমি ঠিক টাইপ করতে পারি ipd<tab>এবং এটি ব্রেকপয়েন্টে প্রসারিত হয়। তারপরে এটি মুছে ফেলা সহজ ddকারণ যেহেতু সবকিছুই একটি লাইনে থাকে।

context=21এখানে বর্ণিত প্রসঙ্গে লাইনের সংখ্যা বৃদ্ধি করে: আমি কীভাবে আইপিডিবিকে ডিবাগ করার সময় প্রসঙ্গের আরও লাইন দেখাতে পারি?

বিকল্পভাবে, আপনি শুরু থেকে প্রোগ্রামগুলি ডিবাগ করতে পারেন:

ipdb3 main.py

তবে আপনি সাধারণত এটি করতে চান না কারণ:

  • পাইথন lines লাইনগুলি পড়ার সাথে সাথে আপনাকে সমস্ত ফাংশন এবং শ্রেণি সংজ্ঞা দিয়ে যেতে হবে
  • আইপিডিবি হ্যাক না করে সেখানে প্রসঙ্গের আকারটি কীভাবে সেট করবেন তা আমি জানি না। এটি অনুমোদিত করার জন্য প্যাচ: https://github.com/gotcha/ipdb/pull/155

অথবা বিকল্প হিসাবে, কাঁচা পিডিবি ৩.২+ এর মতো আপনি কমান্ড লাইন থেকে কিছু ব্রেকপয়েন্ট সেট করতে পারেন:

ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py

যদিও -c cকোনও কারণে ভেঙে গেছে: https://github.com/gotcha/ipdb/issues/156

python -m moduleডিবাগিং এ জিজ্ঞাসা করা হয়েছে: কমান্ড লাইন থেকে পাইথন-এম দিয়ে চালিত পাইথন মডিউলটি কীভাবে ডিবাগ করবেন? এবং পাইথন যেহেতু 3.7 এর মাধ্যমে করা যায়:

python -m pdb -m my_module

জিডিবির তুলনায় পিডিবি এবং আইপিডিবি উভয়ের গুরুতর অনুপস্থিত বৈশিষ্ট্য:

আইপিডিবি নির্দিষ্ট বিরক্তি:

উবুন্টু 16.04, আইপিডিবি == 0.11, পাইথন 3.5.3।



3

আমি আপনার সেরা বাজি ব্যবহার করতে হবে আপনি জাভা / সি # পটভূমি থেকে আসে তাহলে অন্ধকার সঙ্গে Pydev । এটি আপনাকে বিল্ট ইন ডিবাগার সহ একটি সম্পূর্ণ কার্যকরী IDE দেয় I আমি এটি জ্যাঙ্গোর সাথেও ব্যবহার করি।




2

পাইথন টিউটর একটি অনলাইন একক-পদক্ষেপযুক্ত ডিবাগার যা নতুনদের জন্য বোঝানো হয়। আপনি সম্পাদনা পৃষ্ঠায় কোড রাখতে পারেন এবং এটি চালু করতে "ভিজ্যুয়ালাইজ এক্সিকিউশন" ক্লিক করুন।

অন্যান্য জিনিসগুলির মধ্যে এটি সমর্থন করে:

তবে এটি অনেক কিছুই সমর্থন করে না , উদাহরণস্বরূপ:

  • ফাইল পড়া / লেখা - ব্যবহার io.StringIOএবং io.BytesIOপরিবর্তে: ডেমো
  • কোড যা খুব বড়, খুব দীর্ঘ চলে, বা অনেকগুলি ভেরিয়েবল বা বস্তু সংজ্ঞায়িত করে
  • কমান্ড লাইন আর্গুমেন্ট
  • আরগপার্স, সিএসভি, এনাম, এইচটিএমএল, ওএস, স্ট্রাক্ট, দুর্বলতমের মতো প্রচুর স্ট্যান্ডার্ড লাইব্রেরি মডিউল ...

1

অজগর কোডের মাধ্যমে প্রোগ্রামগতভাবে পদক্ষেপ এবং ট্রেসিং সম্ভব (এবং এটি সহজ!)। এ sys.settrace () আরো বিস্তারিত জানার জন্য ডকুমেন্টেশন। এছাড়াও এখানে একটি টিউটোরিয়াল আপনাকে শুরু করতে হয়।



1

পাইচর্ম পাইথনের আইডিই যা একটি ডিবাগারকে অন্তর্ভুক্ত করে। কোডের মাধ্যমে পদক্ষেপে পাইচার্মের ডিবাগারটি ব্যবহার করার বিষয়ে একটি পরিচিতির জন্য এই ইউটিউব ভিডিওটি দেখুন।

পাইচার্ম টিউটোরিয়াল - পাইচর্ম ব্যবহার করে পাইগন কোডটি ডিবাগ করুন

দ্রষ্টব্য: এটি সমর্থন বা পর্যালোচনা করার উদ্দেশ্যে নয়। পাইচার্ম একটি বাণিজ্যিক পণ্য যার জন্য একের জন্য অর্থ প্রদান করা প্রয়োজন, তবে সংস্থাটি শিক্ষার্থী এবং শিক্ষকদের একটি বিনামূল্যে লাইসেন্স প্রদান করে, পাশাপাশি একটি "লাইটওয়েট" সম্প্রদায় সংস্করণ যা নিখরচায় এবং মুক্ত-উত্স।

স্ক্রিনশট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.