পাইথন কোডে PDB ব্রেকপয়েন্টগুলি রাখার সহজ উপায়?


105

শুধু একটি সুবিধার প্রশ্ন। আমি ভিজুয়াল স্টুডিও এবং এক্সকোডের মতো আইডিইতে ডিবাগারগুলির সাথে কিছুটা নষ্ট হয়ে গিয়েছি। import pdb; pdb.set_trace()ব্রেকপয়েন্ট নির্ধারণ করতে টাইপ করতে আমার কিছুটা আনাড়ি মনে হয়েছে (আমি বরং ফাইলটির শীর্ষে পিডিবি আমদানি করব না কারণ আমি ভুলে গিয়ে এটিকে ছেড়ে যেতে পারি)।

আইডিই-তে আপনি যা দেখেন ঠিক তত সরল ও আপত্তিহীন পাইথন কোডে ব্রেকপয়েন্ট স্থাপনের কি সহজ উপায় আছে?


পাইচার্ম ব্যবহার করুন। পাইথন আইডিই ব্যবহার না করে ব্রেকপয়েন্ট লাইনে প্রবেশের চেয়ে কীভাবে সহজ হতে পারে?
সিরো সান্তিলি 郝海东 冠状 病 六四 事件

শুধু ব্যবহার python -m pdb <your_script>.py তারপর b <line_number>মনোনীত লাইন নম্বর (কোন ফাংশন প্রথম বন্ধনী) এ ব্রেকপয়েন্ট সেট করতে। cআপনার ব্রেকপয়েন্টে চালিয়ে যেতে আঘাত করুন । আপনি bনিজেই কমান্ড ব্যবহার করে আপনার সমস্ত ব্রেকপয়েন্টগুলি দেখতে পাচ্ছেন । helpডিবাগিং সহ অন্যান্য পিডিবি কমান্ডগুলি দেখতে টাইপ করুন ।
আর্সেল্ডন

1
পাইথন ৩.7 থেকে আপনি এখন বিল্টিন breakpoint()ফাংশনটি ব্যবহার করতে পারবেন । python.org/dev/peps/pep-0553
ড্যানিয়েল

উত্তর:


117

আপনি pdbকমান্ড লাইন থেকে চালিয়ে আপনার প্রোগ্রামটি চালাতে পারেন

পাইথন-এম পিডিবি আপনার_স্ক্রিপ্ট.পি

এটি প্রথম লাইনটিতে বিভক্ত হবে, তারপরে আপনি breakকমান্ডটি ব্যবহার করে আপনার কোডটিতে যেখানেই চান একটি ব্রেকপয়েন্ট যুক্ত করতে সক্ষম হবেন , এর বাক্য গঠনটি হ'ল:

b (reak) [[ফাইলের নাম:] লিনেনো | ফাংশন [, শর্ত]]

আপনাকে যে কোনও জায়গায় ব্রেকপয়েন্ট যোগ করার ক্ষমতা দেওয়ার পক্ষে এটি যথেষ্ট নমনীয়।


24
এই পয়েন্টটি স্পষ্ট করতে, যদি আমি pdb.set_trace()এবং ডিবাগারে যাই, lকমান্ডটি (তালিকা) ব্যবহার করুন এবং দেখুন যে আমি লাইন 27-তে একটি ব্রেকপয়েন্ট স্থাপন করতে চাই, আমি তখন প্রবেশ করবো: b 27এবং ডিবাগার 27 লাইনে একটি ব্রেকপয়েন্ট স্থাপন করবে (আমি খুঁজে পেয়েছি) ডকুমেন্টেশন বুঝতে কিছুটা চ্যালেঞ্জিং, তাই স্পষ্টতার সেই বিন্দুটি যুক্ত করতে চেয়েছিলেন)।
বেনজামিনগ্রোগ

9
এছাড়াও, যদি আপনার কোনও জিনিস থাকে xএবং আপনি যখন তার পদ্ধতিটি কল করা বন্ধ করে দিতে চান f, আপনি বলতে পারেন break x.fএবং তারপরেও c(ontinue)। এটি কাজ করে এমনকি যদি বস্তুটি অ্যাক্সেসযোগ্য ফাইলে থাকে বা গতিশীলভাবে তৈরি করা হয়েছিল, যেমন আনপিকলিংয়ের মাধ্যমে।
osa

2
স্ট্যাকট্রেসের পরে ডিবাগ করার সময় আপনি পুরোপথটি কোনও মডিউলে অনুলিপি করতে পারেন এবং লাইন নম্বরটি যুক্ত করতে পারেনb /data/users/me/project/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py:596
বৈধ

58

তুমি ব্যবহার করতে পার:

from pdb import set_trace as bp

code
code
bp()
code
code

অতিশয় আলিয়সিং কেন নিশ্চিত নয়, তবে ;-)। কোনও কারণে আমার আইডিই / সম্পাদক (ভিসকোড) এই এএম শাড়ি হয়ে যাচ্ছিল এবং রেখাযুক্ত রাখে। আপনার মন্তব্যটি সত্যিই আমাকে সাহায্য করেছে। দিন শুভ হোক!
মিঃমিসিজ

তোমাকে অনেক ধন্যবাদ!
moorss

আমি set_traceযখন বিপি () ব্যবহার করি তখন কীভাবে আমি আমদানি করতে বাধ্য করতে পারি?
আল্পার

39

ভিমে, আমি এর জন্য একটি ম্যাক্রো সেট আপ করেছি (আমার .vimrc ফাইলে):

map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

সুতরাং আমি কেবল \ বি টিপতে পারি (যখন সন্নিবেশ মোডে নয়) এবং এটি বর্তমান লাইনের পরে একটি ব্রেকপয়েন্টে যুক্ত করে, বা \ বি (মূলধনটি নোট করুন) এবং এটি বর্তমান লাইনের আগে একটি রাখে।

যা ঠিকঠাক কাজ করছে বলে মনে হচ্ছে। বেশিরভাগ অন্যান্য 'সিম্পল' প্রোগ্রামার সম্পাদক (ইমাকস, সাবলিমেটেক্সট, ইত্যাদি) এর এ জাতীয় করার সহজ উপায় থাকতে হবে।

সম্পাদনা: আমার আসলে:

au FileType python map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
au FileType python map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

যা কেবল পাইথন উত্স ফাইলগুলির জন্য এটি চালু করে। আপনি খুব সহজেই জাভাস্ক্রিপ্ট বা অন্য যে কোনও ভাষা ব্যবহার করুন এর জন্য অনুরূপ লাইন যুক্ত করতে পারেন।

2019 আপডেট (পাইথন 3.7+)

পাইথন ৩.7++ এর মধ্যে বিল্টিন রয়েছে breakpoint()যা পূর্বের ভিমে প্রতিস্থাপন করতে পারে import pdb; pdb.set_trace()। এটি এখনও একই কাজ করে।


2
set autoindentআপনার সমাধান .vimrc ফাইলটিতে থাকলে ভাল সমাধান এবং যুক্ত লাইনটিতে সঠিক ইন্ডেন্টেশনও থাকবে ।
জেলি

হ্যাঁ, আমি বুঝতে পারি না কেন বেশিরভাগ ডিস্ট্রো set autoindentস্ট্যান্ডার্ড হিসাবে (এবং অন্যান্য বিকল্পগুলির একটি গোছা) দিয়ে জাহাজ না দেয় । একটি নতুন সিস্টেমের সাথে আমি প্রথম যে কাজটি করি তা হ'ল আরও ভাল ভিএমআরসি ...
ড্যানিয়েল

1
শুধু একটি ভিএম নামের রেজিস্টার ব্যবহার করুন! আপনি যে লাইনটি 'ডি' বাফার করতে চান সেটি সংরক্ষণ করুন (যেমন ডি ইবুগের মতো) টিপে "dyyএবং যখনই আপনার প্রয়োজন হবে কেবল এটি করুন "dpবা "dPভিম রেজিস্টার শিখুন ! তারা খুব দরকারী এবং সর্বদা সমর্থিত!
polvoazul

কীভাবে যুক্ত করবেন: w এর পরে?
জি-রুহ

নাম রেজিস্টার ধারণাটি আরও খানিকটা এগিয়ে নিয়ে যাওয়া, আপনি একটি ম্যাক্রো রেকর্ড করতে পারেন, প্রয়োজনীয় ক্রিয়াকলাপ সম্পাদন করতে পারেন এবং তারপরে ম্যাক্রো বন্ধ করতে পারেন। তারপরে ম্যাক্রোর সামগ্রীগুলি আপনার ভিএমআরসি ফাইলটিতে আটকান। উদাহরণস্বরূপ, ম্যাক্রো দিয়ে শুরু করুন qd, তারপরে পরে "dpপেস্ট করুন। অবশেষে আপনার নির্দেশাবলী কোনও রেজিস্টারকে বরাদ্দ করুন যাতে সর্বদা ভিএম লোডআপে থাকে। উদাহরণ: let @d = 'oimport pdb; pdb.set_trace()k0:w' এখন @dযখনই আপনি কোনও ফাইলটিতে লাইনটি পেস্ট করতে চান কেবল তখনই ব্যবহার করুন। উপরের ফাইলটিও সংরক্ষণ করে। বিশেষ চরগুলি জড়িত থাকার জন্য আপনাকে (নিজের উপরের অনুলিপি / পেস্টের চেয়ে) রেকর্ড করতে হবে (পালানোর জন্য)।
আর্সেল্ডন

27

আপনি যদি প্রতিটি বার প্রোগ্রামটি চালুর জন্য ম্যানুয়ালি ব্রেকপয়েন্টগুলি সেট করতে না চান (পাইথন ৩.২++ তে), উদাহরণস্বরূপ বলুন যে আপনি সরাসরি লাইন 3 এ একটি ব্রেকপয়েন্ট তৈরি করতে চান এবং সেখানে সম্পাদন থামাতে চান:

python -m pdb -c "b 3" -c c your_script.py

নিম্নলিখিত তথ্য সাহায্য করতে পারে:

যদি কোনও ফাইল .pdbrc ব্যবহারকারীর হোম ডিরেক্টরিতে বা বর্তমান ডিরেক্টরিতে উপস্থিত থাকে তবে এটি পড়ে এবং কার্যকর করা হয় যেন এটি ডিবাগার প্রম্পটে টাইপ করা হয়েছিল। এটি এলিয়াসগুলির জন্য বিশেষভাবে কার্যকর। যদি দুটি ফাইলই বিদ্যমান থাকে তবে হোম ডিরেক্টরিতে থাকা একটিটি প্রথমে পড়তে হবে এবং সেখানে সংজ্ঞায়িত এলিয়াসগুলি স্থানীয় ফাইলের দ্বারা ওভাররাইড করা যেতে পারে।

সংস্করণ 3.2 এ পরিবর্তিত হয়েছে: .pdbrc এখন কমান্ডগুলি থাকতে পারে যা ডিবাগ করা চালিয়ে যেতে পারে, যেমন চালিয়ে যাওয়া বা পরবর্তী। পূর্বে, এই আদেশগুলির কোনও প্রভাব ছিল না।

সংস্করণ ৩.২-এ নতুন: পিডিবি.পি এখন একটি -c বিকল্প গ্রহণ করে যা একটি পিপিবিআরসি ফাইলের মধ্যে যেমন আদেশগুলি কার্যকর করে, ডিবাগার কমান্ডগুলি দেখুন।


23

আমি এখনও এটি চেষ্টা করি নি তবে তারা পাইথন ৩.7 -তে একটি নতুন অন্তর্নির্মিত ব্রেকআপপয়েন্ট () নামে প্রয়োগ করেছে যার অর্থ আপনি এখন একটি বিবৃতি দিয়ে একটি ব্রেকপয়েন্ট সন্নিবেশ করতে পারেন:

breakpoint()

1
পাইথন ৩.7 হিসাবে, এটি উত্তর।
এরিক

10

আপনার উত্স কোডে কোনও কিছু প্রয়োগ না করে আপনি কমান্ড লাইনে এইভাবে পিডিবি ব্যবহার করবেন (ডকুমেন্টেশন এবং অন্যান্য অনলাইন সংস্থানগুলি এমন কোনও প্রোগ্রামারকে এটি ব্যাখ্যা করার জন্য ভাল কাজ করে না যারা কেবলমাত্র ভিজ্যুয়াল ডিবাগারগুলি ব্যবহার করেছিল):

শেল প্রম্পটে নিম্নলিখিত টাইপ করে পিডিবি শুরু করুন:

python -m pdb 'python_script'

এই কমান্ডটি পিডিবি আরম্ভ করে এবং পিডিবি ডিবাগারটি আপনার পাইথন_স্ক্রিপ্টের প্রথম লাইনে ভেঙে আপনার কাছ থেকে ইনপুটটির জন্য অপেক্ষা করবে:

(Pdb)

এটি ডিবাগারের সাথে যোগাযোগের জন্য ইন্টারফেস। এখন, আপনি এখানে আপনার আদেশগুলি নির্দিষ্ট করতে পারেন। ভিজ্যুয়াল ডিবাগারগুলিতে বোতাম বা কীবোর্ড শর্টকাটগুলি ব্যবহার করার বিরোধিতা করে, আপনি এখানে একই ফলাফলগুলি অর্জন করতে আদেশগুলি ব্যবহার করবেন।

"এন" (পরবর্তী) আদেশ দিয়ে আপনি আপনার কোডের পরবর্তী লাইনে যেতে পারেন:

(Pdb) n

পরবর্তী কাজ সম্পাদন করলে লাইন নম্বর এবং উত্সে নির্দিষ্ট কোডটি প্রদর্শিত হবে:

> python_script(line number)method name
-> current line in the source code

আপনি আপনার উত্স কোডে একটি লাইন নম্বর নির্দিষ্ট করে একটি ব্রেকপয়েন্ট সেট করতে পারেন।

(Pdb) b 50

এখানে, ডিবাগারটি 50 লাইন ভাঙ্গার জন্য সেট করা আছে If যদি অন্য কোনও ব্রেকপয়েন্ট না হয় তবে 50 নম্বরের ব্রেকপয়েন্টটি প্রথম হবে এবং এটি ব্রেকপয়েন্ট আইডি দ্বারা উল্লেখ করা যেতে পারে যা এই ক্ষেত্রে 1। আপনি যদি আরও ব্রেক পয়েন্ট যুক্ত করেন তবে তারা যথাযথভাবে শনাক্তকারী পাবেন (যেমন, 2, 3 ইত্যাদি)

ব্রেকআপপয়েন্ট সেট হয়ে গেলে, পিডিবি ব্রেকআপপয়েন্টে নীচে না আসা পর্যন্ত আপনি আপনার প্রোগ্রামটি চালিয়ে যাবেন:

(Pdb) c

একবার ব্রেকআপপয়েন্টে পৌঁছলে আপনি আগের লাইনে যেতে পারেন, n কমান্ডের সাথে আগে বর্ণিত। আপনি যদি ভেরিয়েবলের মানগুলি পরীক্ষা করতে চান তবে আপনি প্যারামিটার কমান্ডটি নিম্নলিখিতভাবে প্রয়োগ করবেন:

(Pdb) p variable_name

আপনার যদি আর ব্রেকপয়েন্টের প্রয়োজন না হয়, আপনি স্পষ্ট কমান্ড দিয়ে ব্রেকপয়েন্টের আইডিতে পাস করে এটি সাফ করতে পারেন:

(Pdb) clear 1

অবশেষে, আপনি ডিবাগারটি সম্পন্ন করার পরে অজগর কমান্ড লাইন ইন্টারপ্রেটারটি প্রস্থান করার সাথে সাথে আপনি মৃত্যুদন্ড কার্যকর করতে পারেন।

(Pdb) exit()

আমি আশা করি এটি যে কাউকে পিডিবি দিয়ে শুরু করতে সহায়তা করবে। ডিবাগারটির সাথে আপনি যে আদেশগুলি ব্যবহার করতে পারেন তার একটি তালিকা এখানে রয়েছে: পিডিবি তাই প্রশ্নোত্তর



4

আপনি একটি আইডিই ব্যবহার করতে পারেন যা পাইথন ডিবাগিং সমর্থন করে, বা আপনি চমৎকার Winpdb সরঞ্জামটি দেখতে পারেন। যা কোনও প্ল্যাটফর্মে কাজ করে এবং আপনার পাইথন স্ক্রিপ্টে গ্রাফিকাল ডিবাগিং সুবিধা সরবরাহ করে।

http://winpdb.org/


2

তুমি ব্যবহার করতে পার:

  • উইং আদর্শ
  • পাইদেব প্লাগইন সহ গ্রহন
  • pycharms

উপরের সমস্ত সমর্থন একটি আইডিই এর ভিতরে থেকে অজগর ডিবাগিং।


0

পরমাণুতে পাইথন প্লাগইন ইনস্টল করা থাকলে আপনি কেবল ' pdb' টাইপ করতে পারেন এবং এন্টার টিপুন এবং স্নিপেটটি আপনার জন্য আমদানি লিখে ট্রেস করবে type

আমি এখন এটি ব্যবহার করেছি যে কখনও কখনও আমি কেবল এটি টাইপ করি এমনকি যদি আমি এটি ভিমে সম্পাদনা করি এবং ড্রপডাউনটি উপস্থিত হওয়ার জন্য অপেক্ষা করি।


0

একটি আন্ডাররেটেড পদ্ধতিটি হল পিডিবিতে সরাসরি ব্রেকপয়েন্ট স্থাপন করা:

pdb> b torch/__init__:10

একটি ব্রেকপয়েন্ট স্থাপন করবে site-packages\torch\__init__.py:10

তারপরে pdb> cএই ব্রেকপয়েন্টে থামবে।

নিম্নলিখিতগুলিও বৈধ:

pdb> b d:\anaconda\lib\site-packages\torch\__init__.py:10
pdb> b torch\__init__.py:10
pdb> b d:\\anaconda\\lib\\site-packages\\torch\\__init__.py:10
pdb> b d:/anaconda/lib/site-packages/torch/__init__.py:10

বিশদ জন্য ডক দেখুন ।


0

আপনি পাইথন-মোড প্লাগইন সহ ভিম বা এলপি প্লাগইন সহ ইম্যাক্স ব্যবহার করতে পারেন ।

এই প্লাগইনগুলি আপনাকে সহজ কী-স্ট্রোক ( \ bভিম এবং C-c C-u bইম্যাক্সে) এর সাথে ভারী ওজন আইডিই (কোড ফোল্ডিং, রিফ্যাক্টরিং, আবদ্ধকরণ ইত্যাদি) - সহ আরও অনেকগুলি বৈশিষ্ট্যযুক্ত ব্রেক-পয়েন্ট দেয় all সমস্ত হালকা ওজনের টার্মিনাল ভিত্তিক পাঠ্য সম্পাদকের মধ্যে।


-1

আপনার স্ক্রিপ্টে ডিবাগারটি চালানোর সহজতম উপায় হ'ল

pdb your_script.py

লিনাক্সের কমান্ড-লাইনে পিডিবি চালানো হয়

usage: pdb.py scriptfile [arg] ...

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