GDB डैशबोर्ड – पायथन में GDB के लिए मॉड्यूलर विज़ुअल इंटरफ़ेस

पायथन में GDB के लिए एक मॉड्यूलर दृश्य इंटरफ़ेस।

यह एक स्टैंडअलोन सिंगल-फाइल .gdbinit के रूप में आता है, जो अन्य बातों के अलावा, प्रोग्राम के निष्पादन के दौरान सबसे अधिक प्रासंगिक जानकारी दिखाने वाले एक कॉन्फ़िगर करने योग्य डैशबोर्ड को सक्षम करता है। इसका मुख्य लक्ष्य चालू कार्यक्रम की स्थिति का निरीक्षण करने के लिए जारी किए गए GDB आदेशों की संख्या को कम करना है, जिससे प्रोग्रामर को नियंत्रण प्रवाह पर ध्यान केंद्रित करने की अनुमति मिलती है।

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

पूरे डैशबोर्ड को दूसरे टर्मिनल में प्रदर्शित करें

डैशबोर्ड को दूसरे टर्मिनल पर ले जाना उपयोगी हो सकता है, इसलिए मुख्य टर्मिनल का उपयोग विशेष रूप से GDB कमांड के लिए किया जा सकता है और I / O को लक्षित कर सकता है।

  1. एक टर्मिनल में GDB शुरू करें;
  2. दूसरा टर्मिनल खोलें (जैसे tmux pane) और इसके साथ अपनी TTY प्राप्त करें tty कमांड (उदा। / Dev / ttys001(विभिन्न कारणों से नाम अलग हो सकता है);
  3. आदेश जारी करें डैशबोर्ड -आउटपुट / देव / ttys001 नए बनाए गए टर्मिनल में डैशबोर्ड आउटपुट को पुनर्निर्देशित करना;
  4. हमेशा की तरह डिबग करें।

          एक वेब ब्राउज़र में पूरे डैशबोर्ड को प्रदर्शित करें

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

          1. एक टर्मिनल में GDB शुरू करें;
          2. एक और टर्मिनल खोलें और निष्पादित करें गेट्टी श-सी ‘ट्टी; बिल्ली’;
          3. एक वेब ब्राउज़र खोलें, पर नेविगेट करें http: // localhost: 8080 और TTY पर ध्यान दें;
          4. आदेश जारी करें डैशबोर्ड -आउटपुट / देव / ttys001 वेब ब्राउज़र में डैशबोर्ड आउटपुट को रीडायरेक्ट करने के लिए;
          5. हमेशा की तरह डिबग करें।

          आदेश

          GDB प्रलेखन पर उपलब्ध है डैशबोर्ड की मदद करें। किसी भी GDB कमांड की तरह, संक्षिप्तीकरण संभव है, इसलिए दा, पानी का छींटा, आदि सभी संकल्प करते हैं डैशबोर्ड

          यह रूट कमांड है और इसका उपयोग डैशबोर्ड को मैन्युअल रूप से फिर से परिभाषित करने के लिए किया जाता है।

          • डैशबोर्ड -configuration[[]

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

          dashboard -configuration ~/.gdbinit.d/auto

          • डैशबोर्ड -आउटपुट[[]

          डिफ़ॉल्ट रूप से डैशबोर्ड को GDB कंसोल पर लिखा जाता है, लेकिन इसके आउटपुट को फ़ाइल या किसी अन्य टर्मिनल पर भी रीडायरेक्ट करना संभव है। यदि लक्ष्य एक वैध टर्मिनल TTY है तो इसकी चौड़ाई का उपयोग डैशबोर्ड को प्रारूपित करने के लिए किया जाता है, अन्यथा मुख्य GDB कंसोल की चौड़ाई पर वापस आते हैं।

          तर्क के बिना इस सेटिंग को डिफ़ॉल्ट पर रीसेट करें।

          • डैशबोर्ड-सक्षम [on|off]

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

          कभी-कभी यह डैशबोर्ड को फिर से शुरू करने के लिए सुविधाजनक हो सकता है भले ही लक्ष्य कार्यक्रम ने अपनी निष्पादन स्थिति को नहीं बदला हो, उदाहरण के लिए जब प्रोग्रामर वर्तमान में चयनित फ्रेम को ऊपर या नीचे कमांड के साथ स्विच करता है। उदाहरण के लिए, उपयोगकर्ता-परिभाषित इनिट फ़ाइल में कुछ GDB हुक सेट करके ऐसा करना संभव है:

          define hookpost-up
          dashboard
          end
          
          define hookpost-down
          dashboard
          end

          • डैशबोर्ड -ऑउटआउट[[…]

          डिफ़ॉल्ट रूप से, सभी मॉड्यूल वर्णमाला के क्रम में डैशबोर्ड के भीतर सक्षम और रखे जाते हैं। जैसे-जैसे मॉड्यूल की संख्या बढ़ती है, यह तय करना महत्वपूर्ण है कि कौन से मॉड्यूल डैशबोर्ड का हिस्सा होंगे, और कहां।

          प्रत्येक निर्देशन प्रपत्र में है [!], जब ! तब मौजूद है जो संबंधित मॉड्यूल डिफ़ॉल्ट रूप से अक्षम है। निर्देशों का क्रम डैशबोर्ड के भीतर प्रदर्शन क्रम को दर्शाता है। उदाहरण के लिए:

          dashboard -layout source !assembly stack

          मॉड्यूल जो सूची में प्रकट नहीं होते हैं उन्हें अक्षम किया जाता है और वर्णमाला के अंतिम तत्व के बाद रखा जाता है।

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

          • डैशबोर्ड -स्टाइल[[ [[]]

          डैशबोर्ड की शैलीगत विशेषताओं तक पहुँच, Stylable विशेषताएँ देखें। उदाहरण के लिए, कुछ और परिचितों को संकेत बदलने के लिए:

          dashboard -style prompt '(gdb)'

          तर्क को पायथन शाब्दिक के रूप में पार्स किया गया है और उचित प्रकार में परिवर्तित किया गया है।

          जब केवल नाम निर्दिष्ट किया जाता है तो यह कमांड वर्तमान मूल्य दिखाता है, जबकि बिना तर्क सभी विशेषताओं को प्रिंट करता है।

          मॉड्यूल उप-क्षेत्र

          • प्रत्येक मॉड्यूल अपने स्वयं के उपकमांड जोड़ता है डैशबोर्ड जिसका उपयोग सक्षम ध्वज को टॉगल करने और डैशबोर्ड को फिर से प्रदर्शित करने के लिए किया जाता है।
          • मॉड्यूल अतिरिक्त उप-क्षेत्र भी घोषित कर सकता है, सहायता देखें डैशबोर्ड जीडीबी से।
          • दो अतिरिक्त पूर्वनिर्धारित उप-क्षेत्र हैं: -अंदाज तथा आउटपुट

          -अंदाज

          यदि कोई मॉड्यूल कुछ शैलीगत विशेषताओं की घोषणा करता है तो कमांड डैशबोर्ड -अंदाज उपलब्ध होगी। इसके कामकाज के बराबर है डैशबोर्ड -स्टाइल कमांड लेकिन यह एक मॉड्यूल पर लागू होता है।

          आउटपुट

          इसी तरह, डैशबोर्ड आउटपुट नकल करता है डैशबोर्ड -स्टाइल कमांड लेकिन ऑपरेशन के बारीक अनाज की अनुमति देता है।

          विन्यास

          में फाइलें ~ / .Gdbinit.d / वर्णमाला के क्रम में निष्पादित होते हैं, लेकिन प्राथमिकता पायथन फ़ाइलों को दी जाती है। यदि उपनिर्देशिकाएँ हैं, तो उन्हें पुनरावर्ती रूप से चला दिया जाता है। विचार यह है कि कस्टम मॉड्यूल परिभाषा को कॉन्फ़िगरेशन से अलग रखा जाए।

          सम्मेलन द्वारा, मुख्य कॉन्फ़िगरेशन फ़ाइल को रखा जाना चाहिए ~ / .Gdbinit.d / (जैसे कि ~ / .Gdbinit.d / init) और डैशबोर्ड शैलियों और मॉड्यूल कॉन्फ़िगरेशन को ट्यून करने के लिए इस्तेमाल किया जा सकता है लेकिन सामान्य GDB पैरामीटर भी।

          विकल्प में दिए गए हार्ड कोड परिवर्तनों का विकल्प है .gdbinit, ऐसा करने के लिए बस के तहत नए मॉड्यूल और GDB सेटिंग्स जोड़ें # डिफ़ॉल्ट मॉड्यूल तथा # बेहतर जीडीबी चूक क्रमशः।

          प्रति-प्रोजेक्ट कॉन्फ़िगरेशन

          GDB मूल रूप से ऑटो-लोडिंग का समर्थन करता है .gdbinit फ़ाइलें, यह वर्तमान प्रोजेक्ट प्रकार (जैसे, C ++ विकास, रिवर्स इंजीनियरिंग, आदि) के अनुसार एक अलग डैशबोर्ड शैली सेट करने के लिए काम में आ सकती है। यह सुविधा सुरक्षा कारणों से डिफ़ॉल्ट रूप से अक्षम है। फ़ाइल सिस्टम में हर जगह ऑटो-लोडिंग को सक्षम करने के लिए इस लाइन को मुख्य कॉन्फ़िगरेशन फ़ाइल में जोड़ें:

          set auto-load safe-path /

          स्थिर गुण

          ऐसी कई विशेषताएँ हैं जिनका उपयोग डैशबोर्ड और उसके मॉड्यूल के पहलू को अनुकूलित करने के लिए किया जा सकता है। वे GDB सहायता प्रणाली के भीतर प्रलेखित हैं। डैशबोर्ड खुद किन चिंताओं के साथ इस तक पहुँच सकता है:

          help dashboard -style

          जबकि मॉड्यूल के लिए:

          help dashboard  -style

          रंग और पाठ शैली ANSI एस्केप कोड का उपयोग करके निर्दिष्ट की गई हैं। उदाहरण के लिए 1 से 31 की शैली स्थापित करना ^ पैदा करेगा[[१;३१मीजिसकेपरिणामस्वरूपपाठलाल(३१)औरउज्ज्वल(१)प्रदर्शितहोगा।एएनएसआईआउटपुटकोएसीसीविशेषताकोगलतपरसेटकरकेअक्षमकियाजासकताहै(ध्यानदेंकियहकमांडप्रॉम्प्टकोप्रभावितनहींकरेगा)।[[1;31mwhichwillresultindisplayingthetextred(31)andbright(1)TheANSIoutputcanbedisabledbysettingtheansiattributetoFalse(notethatthiswillnotaffectthecommandprompt)

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

          सिंटैक्स_हाइलाइटिंग स्टाइल करने योग्य विशेषता एक स्ट्रिंग है जो उपयोग करने के लिए पाइलेशन शैली को परिभाषित करता है।

          सभी उपलब्ध शैलियों की सूची (जीडीबी से ही) प्राप्त की जा सकती है:

          python
          from pygments.styles import get_all_styles as styles
          for s in styles():
              print(s)
          end
          

          प्रत्येक उपलब्ध शैली को आसानी से देखने और आज़माने के लिए (अगली शैली और Ctrl-D से बाहर निकलने के लिए वापसी पर प्रेस करें):

          python
          from pygments.styles import get_all_styles as styles
          for s in styles():
              c="dashboard -style syntax_highlighting {!r}".format(s)
              gdb.execute(c)
              print(c)
              input()
          end
          

          एक विभक्त मूल रूप से एक वैकल्पिक लेबल के साथ एक टर्मिनल-वाइड क्षैतिज रेखा है। प्राथमिक डिवाइडर वे हैं जो मॉड्यूल को अलग करने के लिए उपयोग किए जाते हैं, जबकि माध्यमिक डिवाइडर का उपयोग मॉड्यूल के अंदर तार्किक रूप से अलग-अलग वर्गों के लिए किया जा सकता है। जब एक खंड या मॉड्यूल खाली होता है तो विभक्त के लिए उपयोग की जाने वाली शैलियाँ ऑफ क्वालिफायर होती हैं।

          ये सामान्य उद्देश्य एएनएसआई शैली हैं जो सुविधा के लिए परिभाषित हैं और डिफ़ॉल्ट मॉड्यूल के भीतर उपयोग किए जाते हैं।

          • style_selected_1
          • style_selected_2
          • style_low
          • style_high
          • style_error

          कस्टम मॉड्यूल

          कस्टम मॉड्यूल का विचार यह है कि वे लक्ष्य कार्यक्रम की स्थिति से आसानी से जानकारी तक पहुंचने के तरीके प्रदान करते हैं; यह मान लेना सुरक्षित है कि कार्यक्रम के निष्पादन के दौरान ही उन्हें समझा जाएगा।

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

          • लेबल मॉड्यूल लेबल लौटाता है जो विभक्त में दिखाई देगा।
          • लाइनें उन स्ट्रिंग्स की एक सूची लौटाती हैं जो मॉड्यूल कंटेंट बनाएंगे। जब कोई मॉड्यूल अस्थायी रूप से अपनी सामग्री का उत्पादन करने में असमर्थ होता है, तो उसे एक खाली सूची वापस करनी चाहिए; इसके विभक्त फिर ऑफ क्वालीफायर के साथ शैलियों का उपयोग करेंगे।

          एक मॉड्यूल का नाम स्वचालित रूप से वर्ग नाम से प्राप्त होता है।

          मॉड्यूल को एक बार आरंभीकरण के समय पर त्वरित किया जाता है और पूरे जीडीबी सत्र के दौरान रखा जाता है।

          वैकल्पिक रूप से, एक मॉड्यूल में एक विवरण शामिल हो सकता है जो कक्षा के लिए पायथन डॉकस्ट्रिंग निर्दिष्ट करके GDB सहायता प्रणाली में दिखाई देगा।

          वैकल्पिक रूप से, एक मॉड्यूल एक शब्दकोश को लौटाने वाली विशेषता पद्धति को परिभाषित करके शैलीगत विशेषताओं को परिभाषित कर सकता है जिसमें कुंजी विशेषता नाम है और मान एक और शब्दकोष है:

          एक मॉड्यूल का नाम स्वचालित रूप से वर्ग नाम से प्राप्त होता है।

          मॉड्यूल को एक बार आरंभीकरण के समय पर त्वरित किया जाता है और पूरे जीडीबी सत्र के दौरान रखा जाता है।

          वैकल्पिक रूप से, एक मॉड्यूल में एक विवरण शामिल हो सकता है जो कक्षा के लिए पायथन डॉकस्ट्रिंग निर्दिष्ट करके GDB सहायता प्रणाली में दिखाई देगा।

          वैकल्पिक रूप से, एक मॉड्यूल एक शब्दकोश को लौटाने वाली विशेषता पद्धति को परिभाषित करके शैलीगत विशेषताओं को परिभाषित कर सकता है जिसमें कुंजी विशेषता नाम है और मान एक और शब्दकोष है:

          • चूक इस विशेषता के लिए प्रारंभिक मूल्य है।
          • दस्तावेज़ इस विशेषता का प्रलेखन है जो GDB सहायता प्रणाली में दिखाई देगा। इस कुंजी को छोड़ा जा सकता है।
          • नाम पायथन ऑब्जेक्ट की विशेषता का नाम है, कुंजी मान के लिए डिफ़ॉल्ट।
          • प्रकार इस विशेषता का प्रकार है, इसका उपयोग उचित मान के तर्क के रूप में पारित मूल्य को कम करने या अपवाद को बढ़ाने के लिए किया जाता है। यह कुंजी str प्रकार के लिए डिफॉल्ट करती है।
          • जाँच एक नियंत्रण कॉलबैक है, जो स्वीकार किए गए मूल्य को स्वीकार करता है और सही है अगर मूल्य बाधा और गलत को संतुष्ट करता है तो वापस आ जाता है। यह कुंजी वैकल्पिक है, जब छोड़ा गया कोई चेक नहीं किया जाता है।

          वैकल्पिक रूप से, एक मॉड्यूल कमांड डिक्शनरी को डिक्लाइन करके उपकमांड घोषित कर सकता है, जिसमें एक डिक्शनरी होती है जिसमें कमांड कमांड नाम होता है और वैल्यू एक और डिक्शनरी होती है:

          • कार्य कॉलबैक निष्पादित किया जाना है जो GDB प्रॉम्प्ट से कच्चे इनपुट स्ट्रिंग को स्वीकार करता है। कॉलबैक त्रुटिपूर्ण स्थितियों को सूचित करने के लिए अपवाद बढ़ा सकता है जो संदेश उपयोगकर्ता को स्वचालित रूप से दिखाया जाएगा।
          • दस्तावेज़ कमांड प्रलेखन है।
          • समापन पूरा होने की नीति है, संदर्भ मैनुअल में परिभाषित gdb.COMPLETE_ * स्थिरांक में से एक। यह कुंजी वैकल्पिक है और किसी के लिए डिफॉल्ट नहीं है जो कि gdb.COMPLETE_NONE के बराबर है।

          वैश्विक दायरे में कई सहायक सामान्य कार्यों को परिभाषित किया गया है, वे प्रदान किए जा सकते हैं। एएनएसआई आउटपुट, डिवाइडर फॉर्मेटिंग, रूपांतरण कॉलबैक आदि जैसे .gdbinit और चिंता विषय में, वे कम से कम स्व-दस्तावेज होने चाहिए, कुछ उदाहरण हैं। बंडल किए गए डिफ़ॉल्ट मॉड्यूल के भीतर पाया जा सकता है।

          डिफ़ॉल्ट मॉड्यूल पहले से ही एक अच्छा उदाहरण प्रदान करते हैं, लेकिन यहां एक सरल मॉड्यूल है जिसे नए कस्टम मॉड्यूल के लिए टेम्पलेट के रूप में उपयोग किया जा सकता है, यह प्रोग्रामर को डिबगिंग सत्र के दौरान पाठ के कुछ स्निपेट्स को नोट करने की अनुमति देता है।

          class Notes(Dashboard.Module):
              """Simple user-defined notes."""
          
              def __init__(self):
                  self.notes = []
          
              def label(self):
                  return 'Notes'
          
              def lines(self, term_width, style_changed):
                  out = []
                  for note in self.notes:
                      out.append(note)
                      if self.divider:
                          out.append(divider())
                  return out[:-1] if self.divider else out
          
              def add(self, arg):
                  if arg:
                      self.notes.append(arg)
                  else:
                      raise Exception('Cannot add an empty note')
          
              def clear(self, arg):
                  self.notes = []
          
              def commands(self):
                  return {
                      'add': {
                          'action': self.add,
                          'doc': 'Add a note.'
                      },
                      'clear': {
                          'action': self.clear,
                          'doc': 'Remove all the notes.'
                      }
                  }
          
              def attributes(self):
                  return {
                      'divider': {
                          'doc': 'Divider visibility flag.',
                          'default': True,
                          'type': bool
                      }
                  }
          
          

          उपरोक्त का उपयोग करने के लिए बस इसे पायथन फाइल में सेव करें, नोट्सडोम को अंदर कहिए ~ / .Gdbinit.d /निम्नलिखित आदेश (सहायता के साथ) उपलब्ध होंगे:

          dashboard notes
          dashboard notes add
          dashboard notes clear
          dashboard notes -style
          

          न्यूनतम आवश्यकताएँ:

          GDB डैशबोर्ड को ठीक से काम करने के लिए Python 2.7 के साथ कम से कम GDB 7.7 संकलित करने की आवश्यकता होती है।

          अतिरिक्त GDB सामने समाप्त होता है

          GDB डैशबोर्ड अतिरिक्त फ्रंट सिरों के साथ मूल रूप से काम करने के लिए नहीं है, जैसे, TUI, नेमीवर, QtCreate, आदि।

          इसके चारों ओर काम करने के लिए मूल रूप से दो विकल्प हैं:

          • यदि मुख्य डिबगिंग टूल GDB डैशबोर्ड है, तो .gdbinit फ़ाइल को फ्रंट एंड लोड करने से रोकने के लिए अनुशंसा की जाती है, उनके पास आमतौर पर ऐसा करने का विकल्प होता है;
          • अन्यथा GDB डैशबोर्ड को मैन्युअल रूप से लोड करना संभव है, अर्थात सामान्य रूप से इंस्टॉल करें:
          mv ~/.gdbinit ~/.gdb-dashboard
          

          GDB शेल से आवश्यक होने पर अंत में इसे लोड करें:

          source ~/.gdb-dashboard