Python 3.7

bdb - डीबगर फ्रेमवर्क




python

bdb - डीबगर फ्रेमवर्क

स्रोत कोड: Lib/bdb.py

bdb मॉड्यूल मूल डिबगर फ़ंक्शन को संभालता है, जैसे ब्रेकपॉइंट सेट करना या डीबगर के माध्यम से निष्पादन का प्रबंधन करना।

निम्नलिखित अपवाद परिभाषित किया गया है:

exception bdb.BdbQuit

डिबगर छोड़ने के लिए Bdb वर्ग द्वारा उठाया गया अपवाद।

bdb मॉड्यूल दो वर्गों को भी परिभाषित करता है:

class bdb.Breakpoint(self, file, line, temporary=0, cond=None, funcname=None)

यह वर्ग अस्थायी विराम बिंदुओं को लागू करता है, गणनाओं को अनदेखा करता है, अक्षम करता है और (पुनः) सक्षम करता है, और सशर्त करता है।

ब्रेकपॉइंट्स को एक सूची के माध्यम से अनुक्रमित किया जाता है जिसे bpbynumber कहा जाता है और bpbynumber माध्यम से (file, line) जोड़े। कक्षा Breakpoint एकल उदाहरण के लिए पूर्व बिंदु। उत्तरार्द्ध ऐसे उदाहरणों की सूची को इंगित करता है क्योंकि प्रति पंक्ति एक से अधिक ब्रेकपॉइंट हो सकते हैं।

विराम बिंदु बनाते समय, इसका संबद्ध फ़ाइल नाम विहित रूप में होना चाहिए। यदि एक funcname परिभाषित किया गया है, तो उस फ़ंक्शन की पहली पंक्ति निष्पादित होने पर एक ब्रेकपॉइंट हिट गिना जाएगा। एक सशर्त ब्रेकपॉइंट हमेशा एक हिट को गिनता है।

Breakpoint उदाहरणों में निम्न विधियाँ हैं:

deleteMe()

फ़ाइल / लाइन से संबंधित सूची से ब्रेकपॉइंट हटाएं। यदि यह उस स्थिति में अंतिम ब्रेकपॉइंट है, तो यह फ़ाइल / लाइन के लिए प्रविष्टि को भी हटा देता है।

enable()

ब्रेकपॉइंट को सक्षम के रूप में चिह्नित करें।

disable()

ब्रेकपॉइंट को अक्षम के रूप में चिह्नित करें।

bpformat()

ब्रेकपॉइंट के बारे में सभी जानकारी के साथ एक स्ट्रिंग लौटें, अच्छी तरह से स्वरूपित:

  • विराम संख्या।
  • अगर यह अस्थायी है या नहीं।
  • इसकी फ़ाइल, लाइन स्थिति।
  • वह स्थिति जो विराम का कारण बनती है।
  • यदि इसे अगले N बार अनदेखा किया जाना चाहिए।
  • ब्रेकपॉइंट हिट गिनती।

संस्करण 3.2 में नया।

bpprint(out=None)

bpformat() के आउटपुट को फ़ाइल से बाहर प्रिंट करें, या यदि यह None , तो मानक आउटपुट पर।

class bdb.Bdb(skip=None)

Bdb वर्ग एक सामान्य पायथन डिबगर बेस क्लास के रूप में कार्य करता है।

यह वर्ग ट्रेस सुविधा के विवरण का ध्यान रखता है; एक व्युत्पन्न वर्ग को उपयोगकर्ता इंटरैक्शन को लागू करना चाहिए। मानक डीबगर वर्ग ( pdb.Pdb ) एक उदाहरण है।

छोड़ें तर्क, यदि दिया गया है, तो ग्लोब-स्टाइल मॉड्यूल नाम पैटर्न का पुनरावृत्त होना चाहिए। डीबगर उस फ़्रेम में कदम नहीं रखेगा जो एक मॉड्यूल में उत्पन्न होता है जो इनमें से किसी एक पैटर्न से मेल खाता है। एक निश्चित मॉड्यूल में एक फ्रेम को उत्पन्न करने के लिए माना जाता है या नहीं यह फ्रेम __name__ में __name__ द्वारा निर्धारित किया जाता है।

संस्करण 3.1 में नया: स्किप तर्क।

Bdb निम्नलिखित तरीकों को आम तौर पर ओवरराइड करने की आवश्यकता नहीं होती है।

canonic(filename)

एक विहित रूप में फ़ाइल नाम प्राप्त करने के लिए सहायक विधि, जो कि केस-सामान्यीकृत (केस-असंवेदनशील फाइल सिस्टम पर) के रूप में निरपेक्ष पथ, आसपास के कोण कोष्ठक से छीन लिया गया है।

reset()

डीबगिंग प्रारंभ करने के लिए तैयार मानों के साथ botframe , stopframe , returnframe और quitting विशेषताओं को सेट करें।

trace_dispatch(frame, event, arg)

यह फ़ंक्शन डीबग किए गए फ़्रेम के ट्रेस फ़ंक्शन के रूप में स्थापित है। इसका रिटर्न वैल्यू नया ट्रेस फ़ंक्शन है (ज्यादातर मामलों में, जो कि स्वयं है)।

डिफ़ॉल्ट कार्यान्वयन यह तय करता है कि किसी फ़्रेम को कैसे भेजा जाए, यह ईवेंट के प्रकार (स्ट्रिंग के रूप में पारित) पर निर्भर करता है जिसे निष्पादित किया जाना है। घटना निम्न में से एक हो सकती है:

  • "line" : कोड की एक नई लाइन निष्पादित होने वाली है।
  • "call" : एक फ़ंक्शन को "call" किया जाने वाला है, या एक अन्य कोड ब्लॉक दर्ज किया गया है।
  • "return" : एक फ़ंक्शन या अन्य कोड ब्लॉक लौटने वाला है।
  • "exception" : एक अपवाद हुआ है।
  • "c_call" : AC फ़ंक्शन कहा जाने वाला है।
  • "c_return" : AC फ़ंक्शन वापस आ गया है।
  • "c_exception" : AC फ़ंक्शन ने एक अपवाद उठाया है।

पायथन घटनाओं के लिए, विशेष कार्य (नीचे देखें) कहा जाता है। सी घटनाओं के लिए, कोई कार्रवाई नहीं की जाती है।

Arg पैरामीटर पिछली घटना पर निर्भर करता है।

ट्रेस फ़ंक्शन पर अधिक जानकारी के लिए sys.settrace() लिए दस्तावेज़ देखें। कोड और फ़्रेम ऑब्जेक्ट के बारे में अधिक जानकारी के लिए , मानक प्रकार पदानुक्रम देखें

dispatch_line(frame)

यदि डिबगर चालू लाइन पर रुकना चाहिए, तो user_line() विधि (जो उपवर्गों में ओवरराइड की जानी चाहिए) को लागू करें। यदि Bdb.quitting ध्वज सेट है (जो user_line() से सेट किया जा सकता है user_line() तो BdbQuit अपवाद उठाएँ। उस दायरे में आगे ट्रेसिंग के लिए trace_dispatch() विधि का संदर्भ लौटाएं।

dispatch_call(frame, arg)

यदि डिबगर इस फ़ंक्शन कॉल पर रोकना चाहिए, तो user_call() विधि (जो उपवर्गों में ओवरराइड की जानी चाहिए) को लागू करें। यदि Bdb.quitting ध्वज सेट है (जो user_call() से सेट किया जा सकता है user_call() तो BdbQuit अपवाद उठाएँ। उस दायरे में आगे ट्रेसिंग के लिए trace_dispatch() विधि का संदर्भ लौटाएं।

dispatch_return(frame, arg)

यदि डिबगर को इस फ़ंक्शन रिटर्न पर रोकना चाहिए, तो user_return() विधि (जो उपवर्गों में ओवरराइड की जानी चाहिए user_return() आमंत्रित करें। यदि Bdb.quitting ध्वज सेट है (जो user_return() से सेट किया जा सकता है user_return() तो BdbQuit अपवाद उठाएँ। उस दायरे में आगे ट्रेसिंग के लिए trace_dispatch() विधि का संदर्भ लौटाएं।

dispatch_exception(frame, arg)

यदि डिबगर को इस अपवाद पर रोकना चाहिए, तो user_exception() विधि (जो उपवर्गों में ओवरराइड की जानी चाहिए user_exception() आमंत्रित करता है। यदि Bdb.quitting ध्वज सेट है (जो user_exception() से सेट किया जा सकता है user_exception() तो BdbQuit अपवाद को Bdb.quitting । उस दायरे में आगे ट्रेसिंग के लिए trace_dispatch() विधि का संदर्भ लौटाएं।

आम तौर पर व्युत्पन्न वर्ग निम्नलिखित विधियों को ओवरराइड नहीं करते हैं, लेकिन यदि वे रोकना और ब्रेकप्वाइंट की परिभाषा को फिर से परिभाषित करना चाहते हैं, तो वे कर सकते हैं।

stop_here(frame)

यह विधि यह botframe है कि क्या कॉल स्टैक में botframe कहीं नीचे है। botframe वह फ्रेम है जिसमें डिबगिंग शुरू हुई।

break_here(frame)

यह विधि जांचती है कि क्या फ़ाइलनाम और रेखा में एक ब्रेकप्वाइंट है या वर्तमान फ़ंक्शन में, कम से कम फ्रेम से संबंधित है। यदि ब्रेकपॉइंट एक अस्थायी है, तो यह विधि इसे हटा देती है।

break_anywhere(frame)

यह विधि जांचती है कि क्या वर्तमान फ्रेम के फ़ाइल नाम में कोई ब्रेकपॉइंट है।

डिबगर ऑपरेशन पर नियंत्रण पाने के लिए व्युत्पन्न वर्गों को इन तरीकों को ओवरराइड करना चाहिए।

user_call(frame, argument_list)

इस विधि को dispatch_call() से बुलाया जाता है, जब संभावना है कि किसी फ़ंक्शन के अंदर कहीं भी एक ब्रेक आवश्यक हो सकता है।

user_line(frame)

इस विधि को stop_here() से बुलाया जाता है जब या तो stop_here() या break_here() True

user_return(frame, return_value)

इस विधि को dispatch_return() से बुलाया जाता है जब stop_here() True

user_exception(frame, exc_info)

इस विधि को dispatch_exception() से बुलाया जाता है, जब stop_here() True

do_clear(arg)

एक अस्थायी एक होने पर एक ब्रेकपॉइंट को कैसे हटाया जाना चाहिए, इसे संभालें।

इस पद्धति को व्युत्पन्न वर्गों द्वारा लागू किया जाना चाहिए।

चरणबद्ध स्थिति को प्रभावित करने के लिए व्युत्पन्न वर्ग और ग्राहक निम्न विधियों को कॉल कर सकते हैं।

set_step()

कोड की एक पंक्ति के बाद रुकें।

set_next(frame)

दी गई फ़्रेम के अंदर या नीचे अगली पंक्ति पर रुकें।

set_return(frame)

दिए गए फ्रेम से लौटते समय रुकें।

set_until(frame)

रुकें जब लाइन के साथ लाइन वर्तमान से अधिक नहीं होती है या वर्तमान फ्रेम से वापस लौटते समय।

set_trace([frame])

फ़्रेम से डीबग करना प्रारंभ करें। यदि फ़्रेम निर्दिष्ट नहीं है, तो डिबगिंग कॉलर के फ़्रेम से शुरू होती है।

set_continue()

केवल ब्रेकपॉइंट पर या समाप्त होने पर रोकें। यदि कोई ब्रेकप्वाइंट नहीं हैं, तो सिस्टम ट्रेस फ़ंक्शन को None सेट न करें।

set_quit()

quitting विशेषता को True सेट करें। यह dispatch_*() विधियों में से एक को अगले कॉल में BdbQuit उठाता है।

व्युत्पन्न वर्ग और ग्राहक ब्रेकपॉइंट में हेरफेर करने के लिए निम्न विधियों को कॉल कर सकते हैं। ये विधियाँ एक स्ट्रिंग को लौटा देती हैं जिसमें कोई त्रुटि संदेश होता है अगर कुछ गलत हो गया है, या None तो सब ठीक है।

set_break(filename, lineno, temporary=0, cond, funcname)

एक नया ब्रेकपॉइंट सेट करें। यदि लीनो लाइन तर्क के रूप में दिए गए फ़ाइल नाम के लिए मौजूद नहीं है, तो त्रुटि संदेश लौटाएं। फ़ाइल नाम कैनोनिकल रूप में होना चाहिए, जैसा कि canonic() विधि में वर्णित है।

clear_break(filename, lineno)

फ़ाइल नाम और लिनीनो में ब्रेकप्वाइंट हटाएं। यदि कोई भी सेट नहीं किया गया था, तो एक त्रुटि संदेश वापस आ जाता है।

clear_bpbynumber(arg)

ब्रेकपॉइंट हटाएं जिसमें ब्रेकपॉइंट ।bpbynumber में अनुक्रमणिका आर्ग है। यदि आर्ग संख्यात्मक या सीमा से बाहर नहीं है, तो त्रुटि संदेश लौटाएं।

clear_all_file_breaks(filename)

फ़ाइल नाम में सभी ब्रेकप्वाइंट हटाएं। यदि कोई भी सेट नहीं किया गया था, तो एक त्रुटि संदेश वापस आ जाता है।

clear_all_breaks()

सभी मौजूदा ब्रेकप्वाइंट हटाएं।

get_bpbynumber(arg)

दी गई संख्या द्वारा निर्दिष्ट एक विराम बिंदु लौटें। यदि arg एक स्ट्रिंग है, तो इसे एक संख्या में बदल दिया जाएगा। यदि arg एक नॉन-न्यूमेरिक स्ट्रिंग है, यदि दिए गए ब्रेकपॉइंट कभी मौजूद नहीं हैं या हटाए गए हैं, तो एक ValueError है।

संस्करण 3.2 में नया।

get_break(filename, lineno)

जाँच करें कि क्या फाइलन के लिनेनो के लिए एक विराम बिंदु है।

get_breaks(filename, lineno)

यदि कोई भी सेट नहीं है, तो फ़ाइल नाम , या एक खाली सूची में लिनेनो के लिए सभी विराम बिंदुओं पर लौटें।

get_file_breaks(filename)

यदि कोई भी सेट नहीं है, तो फ़ाइल नाम में सभी विराम बिंदु, या एक खाली सूची लौटाएं।

get_all_breaks()

सेट किए गए सभी ब्रेकपॉइंट्स को वापस करें।

व्युत्पन्न वर्ग और ग्राहक एक स्टैक ट्रेस का प्रतिनिधित्व करते हुए डेटा संरचना प्राप्त करने के लिए निम्न विधियों को कॉल कर सकते हैं।

get_stack(f, t)

एक फ्रेम और सभी उच्च (कॉलिंग) और निचले फ्रेम, और उच्च भाग के आकार के रिकॉर्ड की सूची प्राप्त करें।

format_stack_entry(frame_lineno, lprefix=': ')

स्टैक प्रविष्टि के बारे में जानकारी के साथ एक स्ट्रिंग लौटें, (frame, lineno) टपल द्वारा पहचाना गया:

  • फ़ाइल नाम का विहित रूप जिसमें फ्रेम होता है।
  • फ़ंक्शन का नाम, या "<lambda>"
  • इनपुट तर्क।
  • वापसी का मूल्य।
  • कोड की लाइन (यदि यह मौजूद है)।

एक स्ट्रिंग के रूप में दिए गए statement को डिबग करने के लिए डिबगर का उपयोग करने के लिए क्लाइंट द्वारा निम्नलिखित दो तरीके कहे जा सकते हैं।

run(cmd, globals=None, locals=None)

exec() फ़ंक्शन के माध्यम से निष्पादित विवरण को डीबग करें। __main__.__dict__ डिफॉल्ट __main__.__dict__ , स्थानीय लोग __main__.__dict__ को डिफॉल्ट करते हैं।

runeval(expr, globals=None, locals=None)

डीबग eval() फ़ंक्शन के माध्यम से निष्पादित अभिव्यक्ति डीबग करें। ग्लोबल्स और लोकल का एक ही मतलब होता है जैसे run()

runctx(cmd, globals, locals)

पश्चगामी अनुकूलता के लिए। run() विधि को कॉल करता है।

runcall(func, *args, **kwds)

किसी एकल फ़ंक्शन कॉल को डीबग करें, और उसका परिणाम लौटाएं।

अंत में, मॉड्यूल निम्नलिखित कार्यों को परिभाषित करता है:

bdb.checkfuncname(b, frame)

जाँचें कि क्या हमें यहाँ ब्रेक करना चाहिए, यह इस बात पर निर्भर करता है कि ब्रेकपाइंट बी सेट था।

यदि इसे लाइन नंबर के माध्यम से सेट किया गया था, तो यह जांचता है कि क्या b.line उसी तरह है जैसे फ्रेम में तर्क के रूप में भी पास किया गया है। यदि ब्रेकपॉइंट फ़ंक्शन नाम के माध्यम से सेट किया गया था, तो हमें जांचना होगा कि हम सही फ्रेम (सही फ़ंक्शन) में हैं और यदि हम इसकी पहली निष्पादन योग्य लाइन में हैं।

bdb.effective(file, line, frame)

निर्धारित करें कि क्या कोड की इस लाइन पर एक प्रभावी (सक्रिय) ब्रेकपॉइंट है। ब्रेकपॉइंट का एक टपल लौटाएं और एक बूलियन जो इंगित करता है कि क्या अस्थायी ब्रेकपॉइंट को हटाना ठीक है। रिटर्न (None, None) यदि कोई मेल ब्रेकपॉइंट नहीं है।

bdb.set_trace()

कॉलर के फ्रेम से Bdb इंस्टेंस के साथ डिबगिंग शुरू करें।