কীভাবে পিডিবি থেকে প্রস্থান করবেন এবং প্রোগ্রাম চালিয়ে যেতে পারবেন?


111

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


2
continueলুপগুলি returnপ্রস্থান করে , পদ্ধতি / ফাংশনগুলি থেকে বেরিয়ে যায়
স্টিফান

7
@ স্টেফান: তিনি কথা বলছেন continue, পিডিবি কমান্ড। পাইথনের বিবৃতি নয়।
voithos

1
@ টার্টল: continueডক্স অনুসারে, "মৃত্যুদন্ড কার্যকর করা চালিয়ে যাওয়া উচিত, কেবল ব্রেকআপপয়েন্টের সম্মুখীন হলে কেবল থামানো উচিত"। আপনার কি ব্রেক ব্রেকপয়েন্ট সেট রয়েছে যা আঘাত হানে?
voithos

1
অই। আচ্ছা আমি দেখি. হ্যাঁ, আমার একটি লুপের ভিতরে ব্রেক ব্রেক পয়েন্ট রয়েছে। যাইহোক এই কাছাকাছি পেতে? লুপটিকে হাজার বার বলা হয়, তাই আমি নিজেই আঘাত করা চালিয়ে যেতে পারি না।
কচ্ছপ

1
@ টার্টল: আপনার পিডিবি থেকে কোনও ব্রেকপয়েন্ট রয়েছে, pdb.set_trace()না আপনার সোর্স কোডে একটি আছে ?
voithos

উত্তর:


190

continue"মৃত্যুদন্ড কার্যকর করা চালিয়ে যাওয়া উচিত, ব্রেকআপপয়েন্টের মুখোমুখি হলে কেবল থামানো উচিত", সুতরাং আপনি কোথাও একটি ব্রেকপয়েন্ট সেট পেয়েছেন। ব্রেকপয়েন্টটি সরাতে (যদি আপনি এটি ম্যানুয়ালি sertedোকান):

(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /path/to/test.py:5
(Pdb) clear 1
Deleted breakpoint 1
(Pdb) continue

অথবা, আপনি যদি ব্যবহার করে থাকেন তবে আপনি এটি pdb.set_trace()চেষ্টা করে দেখতে পারেন (যদিও আপনি আরও অভিনব উপায়ে পিডিবি ব্যবহার করছেন তবে এটি জিনিসগুলি ভেঙে দিতে পারে ...)

(Pdb) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!

10
উপরের পিডিবি প্রস্থান করে না ।
স্টিভ বার্নস 21

7
প্রশ্নের 15 তম কথা!
স্টিভ বার্নস

13
@ স্টিভবার্নস: আমি মনে করি আপনি এটি খুব আক্ষরিক অর্থে নিচ্ছেন। ওপি কেবল বার বার ব্রেকআপপয়েন্ট মারছে। তাদের কেবলমাত্র ব্রেকপয়েন্টগুলিতে আঘাত না করে তাদের দীর্ঘকালীন প্রক্রিয়া চালিয়ে যাওয়া। পিডিবি আসলে চলছে কিনা তা অনিবার্য।
voithos

35
সেটিংয়ে দুর্দান্ত টিপস set_trace = lambda: None:)
র্যান্ডলেটটি

2
চরম ক্ষেত্রে, কিছুই বীট না set_trace = lambda: None। পাইথন org একটি কমান্ড যুক্ত করা উচিত যা আপনাকে পিডিবি থেকে সরিয়ে দেয়।
ErezO

26

একটি সরল Ctrl- Dপিডিবি ছাড়িয়ে যাবে। আপনি যদি ব্রেকিংয়ের চেয়ে চালিয়ে যেতে চান cতবে পুরো continueকমান্ডের চেয়ে চাপুন


6
আপনি যখন কোনও ফাংশনের ভিতরে, লুপের ভিতরে থাকবেন তখন কী হবে? এটি কেবল আমার জন্য পরবর্তী লুপে চলে যাবে বলে মনে হচ্ছে, এবং আমি পুরো টার্মিনালটি বন্ধ না করে পিডিবি, বা এমনকি পাইথনটি বন্ধ করতে পারি না?
মঙ্গল মঙ্গল

@ লিমোকপ্লান্টেমোন অদ্ভুত, আপনি কি টাইপ করার চেষ্টা করেছেনexit
মিন ট্রায়েট ২

আপনি যদি ট্রেস সেট করেন বা সি সি অবিরত না করা অবধি আপনার ব্রেক পয়েন্ট থাকলে এটি কাজ করে না।
অ্যালেক্স

শ্লীলতাহানি, কিন্তু এটি আমাকে খুব বেশি সময়ের জন্য আটকে থেকে রক্ষা পেয়েছে -_-
জেএমসিজি

7

উত্তর তাই আমি ঠিক ক্ষেত্রে যেখানে আপনি ব্যবহার করছেন এক বিকল্প যুক্ত করতে হবে @voithos থেকে সঠিক set_trace। হ্যাঁ, pdb.set_trace = lambda: Noneহ্যাক ঠিকঠাক কাজ করে, তবে যদি আপনার অন্যান্য ব্রেকপয়েন্ট রয়েছে এবং এটি পরে পুনরায় সক্ষম করতে চান তবে তা নয়। আমার কাছে এটি দুর্ভাগ্যবশত সত্যকে নির্দেশ করেpdb কার্যকারিতা একগুচ্ছ অনুপস্থিত (এমনকি প্রদর্শন তালিকার মতো বেসিক স্টাফ), এবং এটি অন্য একটি ঘটনা।

সুসংবাদটি হ'ল এটির pdb++জন্য একটি দুর্দান্ত ড্রপ-ইন প্রতিস্থাপন pdbএবং এটি যে বিষয়গুলির সমাধান করে তার মধ্যে একটি হ'ল অক্ষম হওয়ার সমস্যা set_trace। সুতরাং আপনি সহজভাবে করতে পারেন:

pip install pdbpp

এবং তারপরে (Pdb++)প্রম্পটে টাইপ করুন:

pdb.disable()

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

pdb.enable()

সহজ! এবং তার উপরে আপনি প্রচুর অন্যান্য দরকারী গুডিজ পাবেন।


4

আপনি যদি সত্যই ডিবাগারটি থেকে বেরিয়ে আসতে চান তবে আপনার উইনপিডিবি এর মতো কিছু চালানো দরকার যা আপনাকে প্রক্রিয়া থেকে আলাদা করতে এবং তারপরে ডিবাগারটি প্রস্থান করতে দেয়, (এনবি এটি মাল্টি-প্ল্যাটফর্ম)।

আপনি যদি ডিবাগিং চালিয়ে যেতে চান তবে নির্দিষ্ট ব্রেকপয়েন্টে আর থামতে না পারেন তবে আপনার প্রয়োজন:

  1. ব্রেকপয়েন্ট নম্বর, (বা ফাইল এবং লাইন নম্বর) এর একটি নোট তৈরি করুন,
  2. হয় cl bp_number বা clear file:line স্থায়ীভাবে ব্রেকপয়েন্টটি সরিয়ে দিতে বা disable pb_number এটিকে টগল বন্ধ করতে তবে এটিকে আবার টগল করতে সক্ষম হতে হবে।
  3. তারপর continueএবং আপনার প্রোগ্রাম রান তারপর পরবর্তী পর্যন্ত বিভিন্ন ব্রেকপয়েন্ট হিট হয়।

উপরোক্ত আরও তথ্যের জন্য ম্যানুয়ালটি দেখুন


0

কোনও কিছু ইনস্টল না করেই পিডিবি থেকে বেরিয়ে আসার নতুন উপায় সন্ধান করুন: - যখন প্রোগ্রামটি চলতে শুরু করে, ctrl + c টিপুন, তারপরে উইন্ডোটিকে অন্য (যে কোনও উইন্ডো) তে স্যুইচ করুন, তারপরে পিডিবি চলমান মূল শেলটি এমন কিছু দেখাতে হবে: (পিডিবি) ..... - পিডিবিতে ফিরে যান, তারপরে এন্টার টিপুন, এখন আপনি সমস্ত প্রস্তুত, পিডিবি কমান্ড শেলটি আবার প্রদর্শিত হবে

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