2015-08-17 12 views
28

मैं आईपीडीबी का उपयोग अक्सर कोड के टुकड़े पर कूदने के लिए करता हूं जो पृथक है। यानी इसका उपयोग करने वाली वास्तविक स्क्रिप्ट लिखना मुश्किल है। इसके बजाय मैं मॉकिंग के साथ एक न्यूनतम परीक्षण केस लिखता हूं और इसमें कूदता हूं।बाहर निकालना पायथन डीबगर आईपीडीबी

कार्यप्रवाह के लिए अनुकरणीय:

def func(): 
    ... 
    import ipdb 
    ipdb.set_trace() 
    ... 

def test_case(): 
    ... 
    func() 
    ... 

फिर,

py.test test_file.py -s -k test_case 

आह्वान अब, आमतौर पर मैं सिर्फ एक या चर दो की जांच करके छोड़ना चाहते। कोड बदलें और इसे फिर से करें।

मैं कैसे छोड़ सकता हूँ? मैनुअल कहता है q डीबगर छोड़ देता है। यह (वास्तव में) नहीं है। डीबगर वास्तव में समाप्त होने से पहले आपको कुछ बार छोड़ना होगा। Ctrl-C और Ctrl-D के लिए एक ही व्यवहार (अतिरिक्त निराशा के साथ जो Ctrl-D को मारने से कई बार अंततः टर्मिनल को छोड़ देता है)।

वहाँ छोड़ने के लिए मजबूर करने के लिए एक स्मार्ट तरीका है? क्या यह वर्कफ़्लो भी समझदार है? ऐसा करने का मानक तरीका क्या है?

+3

मैं इस अब भी हो रही है। यह हालिया व्यवहार है। यह ctrl-c बस ठीक था लेकिन अब यह अभी नहीं छोड़ेगा। एक अपवाद फेंकने से भी इसे रोक नहीं पाएगा। – felix

+2

लिंक करने के लिए [GitHub मुद्दे] (https://github.com/gotcha/ipdb/issues/111) इस समस्या के बारे। –

+0

आईपीथॉन 5.2 में मूल समस्या हल हो गई है, @ cheflo का जवाब देखें। क्या आप इसे उत्तर के रूप में स्वीकार कर सकते हैं कि अन्य लोगों को सुझाए गए कामकाज से भ्रमित न करें? – ffeast

उत्तर

33

मैं में मेरी .pdbrc

import os 

alias kk os.system('kill -9 %d' % os.getpid()) 

kk डीबगर और (प्रक्रिया है कि डिबगर को गति प्रदान) को मारता है निम्नलिखित डाल दिया।

+1

यह काम करेगा लेकिन समस्या के समाधान के बजाय कामकाज की तरह दिखता है। क्या आपने इसके आईपीडीबी डेवलपर्स से पूछने की कोशिश की? बीटीडब्ल्यू एक समान समस्या http: // stackoverflow की तरह दिखता है।कॉम/प्रश्न/390 9 0752/कैसे-से-छोड़ने-आईपीडीबी-इन-पोस्ट-मॉर्टम-डीबगिंग – ffeast

+0

हां, मैं मानता हूं कि यह एक कार्य-आसपास है। इस काम के आसपास के डाउनसाइड्स में से एक यह है कि यदि आप '% डीबग' के साथ आईप्यथॉन कंसोल से डीबगर का आह्वान करते हैं और मेरे 'केके' मैक्रो का उपयोग करते हैं तो यह केवल डीबगर को छोड़ नहीं देगा बल्कि आईपीथॉन कंसोल को भी मार देगा। इसे डेवलपर्स के साथ उठाया जाना चाहिए। – joachim

+0

.pdbrc फ़ाइल कहां है? क्या आपको इसे बनाना है यदि यह पहले से मौजूद नहीं है? – RubberDuckRabbit

33

मेरे लिए काम किया है:

import sys 
sys.exit() 

IPython के नए संस्करण पर, के रूप में ऊपर और नीचे उल्लेख किया है, यह काम नहीं करता। उस मामले में,

import os 
os._exit(0) 

अभी भी चाल करना चाहिए।

+1

यह मेरे लिए काम नहीं कर रहा है। मुझे बस कंसोल पर "*** SystemExit: -1" मिलता है और मैं अभी भी आईपीडीबी में हूं। – velotron

+12

'os._exit (0) 'मेरे लिए काम किया। – akki

+0

धन्यवाद। Os.exit (0) –

7

आईपीथन 5.1.0 के हाल के संस्करण के साथ यह समस्या है। आप नीचे दिए गए कोड का उपयोग कर अपने पर्यावरण के साथ की जाँच कर सकते हैं:

pip freeze | egrep -i '^i' 

यह समाधान हो जाएगा द्वारा IPython == 5.0.0 के लिए डाउनग्रेड।

pip install ipython==5.0.0 

यह मेरे लिए काम करता है।

4

जैसा कि किसी अन्य उत्तर में बताया गया है, यह आईपीथन 5.1 में एक बग था। यह this pull request में तय किया गया था और अब IPython 5.2 और बाद में कोई समस्या नहीं है। अब आप q, quit(), या Ctrl + डी डीबगर से बाहर निकलने के लिए उपयोग कर सकते हैं।

+0

बस इसका परीक्षण किया और यह मेरे लिए ठीक काम करता है। मुझे लगता है कि यह ipython 5.2 के रूप में स्वीकार्य उत्तर होना चाहिए बाद में सुझाए गए कामकाज – ffeast

+1

नहीं समझते हैं। यदि आप लूप में हैं तो यह काम नहीं करता है। –

+0

@ डार्कस्टार 1 यह मेरे लिए एक लूप में काम करता है, क्या आप एक नमूना पोस्ट कर सकते हैं जो काम नहीं करता है? –

संबंधित मुद्दे