it-swarm.asia

كيفية الخروج من pdb والسماح لبرنامج المتابعة؟

أنا أستخدم وحدة pdb لتصحيح البرنامج. أود أن أفهم كيف يمكنني الخروج من pdb والسماح للبرنامج بالمضي قدمًا حتى يكتمل. يعد تشغيل البرنامج مكلفًا من الناحية الحسابية ، لذلك لا أرغب في الخروج دون محاولة إكمال البرنامج النصي. continue لا يبدو أنه يعمل. كيف يمكنني الخروج من pdb ومتابعة برنامجي؟

72
turtle

continue "متابعة التنفيذ ، لا تتوقف إلا عند مواجهة نقطة توقف" ، بحيث يكون لديك نقطة توقف معينة في مكان ما. لإزالة نقطة الإيقاف (إذا قمت بإدخالها يدويًا):

(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) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!
142
voithos

بسيط Ctrl-D سوف تندلع من PDB. إذا كنت ترغب في المتابعة بدلاً من كسر ، فقط اضغط c بدلاً من الأمر continue بالكامل

16
Minh Triet

إذا كنت ترغب حقًا في الخروج من مصحح الأخطاء ، فأنت بحاجة إلى تشغيل شيء مثل WinPdb والذي يتيح لك الانفصال عن العملية ثم الخروج من مصحح الأخطاء (ملاحظة: إنه نظام أساسي متعدد).

إذا كنت ترغب في متابعة تصحيح الأخطاء ولكن لم تعد تتوقف عند نقطة توقف معينة ، فأنت بحاجة إلى:

  1. قم بتدوين رقم نقطة الإيقاف (أو الملف ورقم السطر) ،
  2. إما cl bp_numberأوclear file:line لإزالة نقطة الإيقاف نهائيًا أو disable pb_number لتبديلها ولكن تكون قادرًا على تبديلها مرة أخرى.
  3. ثم continue والبرنامج الخاص بك يعمل حتى ذلك الحينمختلفنقطة توقف.

لمزيد من التفاصيل حول ما ورد أعلاه انظر الدليل .

4
Steve Barnes

الإجابة منvoithos صحيحة ، لذلك سأضيف مجرد بديل واحد في الحالة التي تستخدم فيها set_trace. نعم ، يعمل الاختراق pdb.set_trace = lambda: None على ما يرام ، ولكن ليس إذا كانت لديك نقاط توقف أخرى وتريد إعادة تمكينها لاحقًا. هذا بالنسبة لي يشير إلى حقيقة أن pdb للأسف يفتقد إلى مجموعة من الوظائف (حتى الأشياء الأساسية مثل قوائم العرض) ، وهذه حالة أخرى.

والخبر السار هو أن pdb++ هو بديل رائع عن pdb ، وأحد الأشياء التي يحلها هو بالضبط مشكلة set_trace. لذلك يمكنك ببساطة القيام بما يلي:

pip install pdbpp

ثم في (Pdb++) موجه ، اكتب:

pdb.disable()

إذا كنت تريد إعادة تمكينها لاحقًا ، فلا غرابة في ذلك:

pdb.enable()

سهل! وستحصل على الكثير من الأشياء الجيدة المفيدة الأخرى.

3
Adam Spiers