ब्रेकसेटपॉइंट को नोसेटसेट - पीडीबी विकल्प के साथ सेट करना


88

nosetests --pdbआइए मुझे त्रुटि या विफलता पर रोकें, लेकिन मेरी जरूरतों के लिए बहुत देर हो चुकी है। निष्पादन के दौरान कोड के माध्यम से कदम रखने से मुझे डिबग करने में मदद मिलती है कि समस्या कहां है।

हालाँकि, nosetests सहायक होते हैं क्योंकि वे परीक्षण की अनुमति देते हैं जो सापेक्ष आयात पर निर्भर करते हैं (अर्थात पैकेज में परीक्षण)।

परीक्षण निष्पादित होने से पहले मैं ब्रेकप्वाइंट कैसे सेट कर सकता हूं? वर्तमान में मैं उपयोग कर रहा हूं:

python -m pdb /path/to/my/nosetests testfile.py

यह समाधान पर्याप्त नहीं है। Nosetests pdb आउटपुट के साथ हस्तक्षेप करता है, और मेरा कीबोर्ड नियंत्रण (जैसे तीर कुंजी) टूट जाता है।

आयात pdb का उपयोग करना; pdb.set_trace () एक अच्छे विचार की तरह प्रतीत होगा, हालाँकि nosetests pdb कंसोल तक मेरी पहुँच को रोक रहा है।

जवाबों:


118

आप जोड़ सकते हो

import pdb; pdb.set_trace() 

अपने स्रोत में कहीं भी जिसे आप डिबगर में रोकना चाहते हैं।

सुनिश्चित करें कि आप -sनाक को पास करते हैं ताकि यह कब्जा न करे stdout


मैं अपने प्रश्न में इसे जोड़ने वाला था। यह स्वीकार्य समाधान नहीं है। Nosetests के साथ इसका उपयोग करते समय, यह स्पष्ट है कि यह शाब्दिक रूप से अनुपयोगी है क्योंकि pdb कंसोल तक पहुंच की जांच की जाती है, और कोई pdb कमांड निष्पादित नहीं किया जा सकता है।
डेविन

25
स्टडआउट पर कब्जा करने से रोकने के लिए -s झंडा को nosetests में जोड़ें, और आप बस ठीक pdb का उपयोग करने में सक्षम होंगे।
नेड बैचेल्ड

1
काम नहीं करता। यह प्रयोग करें:from nose.tools import set_trace; set_trace()
anilbey

142

उपयोग करने के लिए याद रखने से बेहतर यह है कि नाक के साथ आने -sवाले set_traceसंस्करण का उपयोग करें । जोड़ना

from nose.tools import set_trace; set_trace()

जहाँ भी आप डिबगर में तोड़ना चाहते हैं। स्टडिन / आउट पुनर्निर्देशन का आपके लिए ध्यान रखा जाएगा। केवल एक अजीब साइड इफ़ेक्ट जो मैंने चलाया है, वह runहै नाक चलाने के दौरान डीबगिंग के दौरान अपने कोड को pdb (उपयोग करते हुए ) से पुनः आरंभ करने में असमर्थता ।


क्या इसका कोई दस्तावेज है? लूप से बाहर कैसे जाएं?
एजे

आपका मतलब है कि एक बार pdbचलने के बाद आप कैसे नेविगेट करें ? मुझे यकीन है कि डॉक्स हैं, लेकिन मेरे सिर के ऊपर से- s"एक फ़ंक्शन कॉल में कदम", n"अगले" स्टेटमेंट पर uजाता है, स्टैक "ऊपर" dचलता है , और "नीचे" चलता है। आप bब्रेकपॉइंट सेट करने और c"जारी रखने" के लिए उपयोग कर सकते हैं और स्टेपिंग डिबगर छोड़ सकते हैं। उम्मीद है की वो मदद करदे!
मैट लुओंगो

4
यह स्वीकृत उत्तर होना चाहिए। यह मूल pdb.set_trace () कमांड की सभी नियमित कार्यक्षमता प्रदान करता है।
tbm

इस के एक ipython / ipdb संस्करण के लिए कोई संभावना?
Gerrit

5

यदि आपके पास असीमित विषमता के लिए ipython है , तो :

import ipdb; ipdb.set_trace() 

* असीमित awesomeness: बस ipython की तरह - ऑटो पूरा, रंग आदि


1

यदि आप pytest का उपयोग कर रहे हैं , तो आप उपयोग कर सकते हैं

import pytest; pytest.set_trace()

प्रलेखन देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.