Erlang 21 - 2. Debugger

2 डिबगर




erlang

2 डिबगर

2.1 आरंभ करना

डीबगर का उपयोग करने के लिए, मूल चरण निम्नानुसार हैं:

चरण 1. डीबगर को कॉल करके डीबगर प्रारंभ करें debugger:start()

Monitor window को सभी डीबग की गई प्रक्रियाओं, व्याख्या किए गए मॉड्यूल और चयनित विकल्पों के बारे में जानकारी के साथ प्रदर्शित किया जाता है। प्रारंभ में आमतौर पर कोई डीबग प्रक्रिया नहीं होती है। सबसे पहले, यह निर्दिष्ट किया जाना चाहिए कि कौन से मॉड्यूल डिबग किए जाने हैं (जिन्हें व्याख्या भी कहा जाता है )। निम्नलिखित के रूप में आगे बढ़ें:

चरण 2. मॉनिटर विंडो में मॉड्यूल> इंटरप्रेट करें ... चुनें।

Interpret Modules window प्रदर्शित की जाती है।

चरण 3. इंटरप्लॉग डायलॉग विंडो से उपयुक्त मॉड्यूल का चयन करें।

ध्यान दें

केवल विकल्प debug_info सेट के साथ संकलित मॉड्यूल की व्याख्या की जा सकती है। गैर-व्याख्यात्मक मॉड्यूल इंटरप्लस मॉड्यूल विंडो में कोष्ठक के भीतर प्रदर्शित होते हैं।

चरण 4. मॉनिटर विंडो में, मॉड्यूल> व्याख्या की जाने वाली मॉड्यूल> दृश्य का चयन करें।

स्रोत फ़ाइल की सामग्री View Module window में प्रदर्शित होती है।

चरण 5. breakpoints सेट breakpoints , यदि कोई हो।

चरण 6. डीबग किए जाने वाले प्रोग्राम को प्रारंभ करें। यह एरलैंग शेल से सामान्य तरीके से किया जाता है।

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

चरण 7. इनमें से किसी एक प्रक्रिया में संलग्न होने के लिए, इसे डबल-क्लिक करें, या प्रक्रिया का चयन करें और फिर प्रक्रिया> संलग्न करें चुनें। एक प्रक्रिया में संलग्न करना इस प्रक्रिया के लिए एक Attach Process window खोलता है।

चरण 8. अटैच प्रक्रिया विंडो से, आप प्रक्रिया निष्पादन को नियंत्रित कर सकते हैं, चर मानों का निरीक्षण कर सकते हैं, ब्रेकप्वाइंट सेट कर सकते हैं, और इसी तरह।

2.2 ब्रेकपॉइंट और ब्रेक डायलॉग विंडोज

एक बार उपयुक्त मॉड्यूल की व्याख्या करने के बाद, स्रोत कोड में प्रासंगिक स्थानों पर ब्रेकप्वाइंट सेट किए जा सकते हैं। ब्रेकप्वाइंट एक लाइन के आधार पर निर्दिष्ट किए जाते हैं। जब कोई प्रक्रिया किसी ब्रेकपॉइंट पर पहुंचती है, तो वह रुक जाती है और उपयोगकर्ता से कमांड ( स्टेप , स्किप , कंटिन्यू ...) का इंतजार करती है।

ध्यान दें

जब कोई प्रक्रिया ब्रेकपॉइंट तक पहुंचती है, तो केवल उस प्रक्रिया को रोक दिया जाता है। अन्य प्रक्रियाएं प्रभावित नहीं होती हैं।

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

निष्पादन योग्य लाइनें

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

निम्नलिखित उदाहरण में, लाइनें 2, 4, 6, 8 और 11 निष्पादन योग्य लाइनें हैं:

1: is_loaded(Module,Compiled) ->
2:   case get_file(Module,Compiled) of
3:     {ok,File} ->
4:       case code:which(Module) of
5:         ?TAG ->
6:           {loaded,File};
7:         _ ->
8:           unloaded
9:       end;
10:    false ->
11:      false
12:  end.

स्थिति और ट्रिगर क्रिया

एक ब्रेकपॉइंट सक्रिय या निष्क्रिय हो सकता है। निष्क्रिय ब्रेकपॉइंट्स की अनदेखी की जाती है।

प्रत्येक ब्रेकपॉइंट में एक ट्रिगर एक्शन होता है जो निर्दिष्ट करता है कि क्या होना है जब कोई प्रक्रिया उस तक पहुंच गई है (और रोका गया):

  • सक्षम करें - ब्रेकपॉइंट को सक्रिय (डिफ़ॉल्ट) रहना है।
  • अक्षम करें - ब्रेकपॉइंट को निष्क्रिय करना है।
  • डिलीट - ब्रेकपॉइंट को डिलीट करना है।

लाइन ब्रेकप्वाइंट

एक मॉड्यूल में एक निश्चित रेखा पर एक लाइन ब्रेकपॉइंट बनाया जाता है।

चित्र 2.1: लाइन ब्रेक डायलॉग विंडो

पॉपअप मेनू खोलने के लिए मॉड्यूल प्रविष्टि पर राइट-क्लिक करें जिसमें से उपयुक्त मॉड्यूल का चयन किया जा सकता है।

जब मॉड्यूल मॉड्यूल विंडो या अटैच प्रोसेस विंडो में प्रदर्शित किया जाता है तो लाइन को डबल-क्लिक करके एक लाइन ब्रेकपॉइंट (और डिलीट) भी बनाया जा सकता है।

सशर्त विराम बिंदु

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

हालत उपयोगकर्ता द्वारा एक मॉड्यूल नाम CModule और एक फ़ंक्शन नाम CFunction CModule रूप में निर्दिष्ट किया गया है। जब कोई प्रक्रिया ब्रेकपॉइंट तक पहुंचती है, तो CModule:CFunction(Bindings) का मूल्यांकन किया जाता है। यदि और केवल यदि यह फ़ंक्शन कॉल true , तो प्रक्रिया बंद हो जाती है। यदि फ़ंक्शन कॉल false , तो ब्रेकपॉइंट को चुपचाप अनदेखा कर दिया जाता है।

Bindings परिवर्तनशील बाइंडिंग की एक सूची है। Variable (एक परमाणु के रूप में दिया गया) का मान प्राप्त करने के लिए, फ़ंक्शन int:get_binding(Variable,Bindings) उपयोग करें int:get_binding(Variable,Bindings) । फ़ंक्शन unbound या {value,Value}

चित्र 2.2: सशर्त विराम संवाद विंडो

पॉपअप मेनू खोलने के लिए मॉड्यूल प्रविष्टि पर राइट-क्लिक करें जिसमें से उपयुक्त मॉड्यूल का चयन किया जा सकता है।

उदाहरण:

एक सशर्त विराम बिंदु c_test:c_break/1 को मॉड्यूल fact में लाइन 6 पर जोड़ा जाता fact । हर बार ब्रेकपॉइंट पहुंचने पर, फ़ंक्शन को कहा जाता है। जब N 3 के बराबर होता है, तो फ़ंक्शन true हो जाता true और प्रक्रिया रुक जाती है।

fact.erl से निकालें:

5. fac(0) -> 1;
6. fac(N) when N > 0, is_integer(N) -> N * fac(N-1).

c_test:c_break/1 परिभाषा c_test:c_break/1 :

-module(c_test).
-export([c_break/1]).

c_break(Bindings) ->
    case int:get_binding('N', Bindings) of
        {value, 3} ->
            true;
        _ ->
            false
    end.

कार्य विराम बिंदु

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

चित्र 2.3: फंक्शन ब्रेक डायलॉग विंडो

पॉपअप मेनू खोलने के लिए जिसमें से उपयुक्त मॉड्यूल का चयन किया जा सकता है, मॉड्यूल प्रविष्टि पर राइट-क्लिक करें।

सूची बॉक्स में मॉड्यूल के सभी कार्यों को लाने के लिए, जब एक मॉड्यूल नाम निर्दिष्ट किया गया हो, तो ठीक बटन पर क्लिक करें (या रिटर्न या टैब कुंजी दबाएं)।

2.3 स्टैक ट्रेस

एरलैंग एमुलेटर एक स्टैक ट्रेस का ट्रैक रखता है, हाल के फ़ंक्शन कॉल के बारे में जानकारी। उदाहरण के लिए, कोई त्रुटि होने पर इस जानकारी का उपयोग किया जाता है:

1> catch a+1.
{'EXIT',{badarith,[{erlang,'+',[a,1],[]},
                   {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,573}]},
                   {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,357}]},
                   {shell,exprs,7,[{file,"shell.erl"},{line,674}]},
                   {shell,eval_exprs,7,[{file,"shell.erl"},{line,629}]},
                   {shell,eval_loop,3,[{file,"shell.erl"},{line,614}]}]}}

स्टैक ट्रेस के बारे में जानकारी के लिए, Erlang संदर्भ मैनुअल में अनुभाग Errors and Error Handling देखें।

डीबगर हाल ही में व्याख्या किए गए कार्यों का ट्रैक रखकर स्टैक ट्रेस का अनुकरण करता है। (वास्तविक स्टैक ट्रेस का उपयोग नहीं किया जा सकता है, क्योंकि यह दिखाता है कि डिबगर के कौन से कार्य कहे गए हैं, बजाय इसके कि कार्यों की व्याख्या की गई है।)

यह जानकारी Attach Process window में अप और डाउन बटन का उपयोग करके फ़ंक्शन कॉल की श्रृंखला को पार करने के लिए उपयोग की जा सकती है।

डिफ़ॉल्ट रूप से, डीबगर केवल पुनरावर्ती फ़ंक्शन कॉल के बारे में जानकारी बचाता है, अर्थात् फ़ंक्शन कॉल जो अभी तक एक मान नहीं लौटा है (विकल्प स्टैक ऑन, नो टेल )।

कभी-कभी, हालांकि, यह सभी कॉल, यहां तक ​​कि पूंछ-पुनरावर्ती कॉल को बचाने के लिए उपयोगी हो सकता है। यह विकल्प स्टैक ऑन, टेल के साथ किया जाता है। ध्यान दें कि यह विकल्प अधिक मेमोरी का उपभोग करता है और कई पूंछ-पुनरावर्ती कॉल होने पर व्याख्या किए गए कार्यों के निष्पादन को धीमा कर देता है।

डिबगर स्टैक ट्रेस सुविधा को बंद करने के लिए, स्टैक ऑफ़ का विकल्प चुनें।

ध्यान दें

यदि कोई त्रुटि होती है, तो स्टैक ट्रेस इस मामले में खाली हो जाता है।

स्टैक ट्रेस विकल्प को बदलने के तरीके के बारे में जानकारी के लिए, अनुभाग Monitor Window

2.4 मॉनिटर विंडो

मॉनिटर विंडो डीबगर की मुख्य विंडो है और निम्नलिखित प्रदर्शित करती है:

  • एक लिस्टबॉक्स जिसमें सभी व्याख्या किए गए मॉड्यूल के नाम हैं

    मॉड्यूल को डबल क्लिक करने से व्यू मॉड्यूल विंडो आती है।

  • कौन से विकल्प चुने गए हैं

  • सभी डीबग की गई प्रक्रियाओं के बारे में जानकारी, अर्थात्, सभी प्रक्रियाएं जो व्याख्या किए गए मॉड्यूल में कोड को निष्पादित या निष्पादित कर रही हैं

चित्र 2.4: मॉनिटर विंडो

ऑटो अटैच बॉक्स, स्टैक ट्रेस लेबल, बैक ट्रेस साइज़ लेबल और स्ट्रिंग्स बॉक्स कुछ विकल्प सेट करते हैं। इन विकल्पों के बारे में जानकारी के लिए, अनुभाग Options Menu देखें।

प्रक्रिया ग्रिड

पीआईडी

प्रक्रिया पहचानकर्ता।

प्रारंभिक कॉल

इस प्रक्रिया द्वारा किसी व्याख्यात्मक कार्य के लिए पहला कॉल। ( Module:Function/Arity )

नाम

पंजीकृत नाम, यदि कोई हो। यदि एक पंजीकृत नाम प्रदर्शित नहीं किया जाता है, तो यह हो सकता है कि नाम दर्ज होने से पहले डीबगर को प्रक्रिया के बारे में जानकारी प्राप्त हो। संपादित करें> ताज़ा करें का चयन करने का प्रयास करें

स्थिति

वर्तमान स्थिति, निम्न में से एक:

बेकार

व्याख्या किए गए फ़ंक्शन कॉल ने एक मान लौटाया है, और प्रक्रिया अब व्याख्या कोड को निष्पादित नहीं कर रही है।

दौड़ना

प्रक्रिया चल रही है।

इंतज़ार कर रही

प्रक्रिया एक receive विवरण में प्रतीक्षा कर रही है।

टूटना

एक ब्रेकपॉइंट पर प्रक्रिया को रोक दिया जाता है।

बाहर जाएं

प्रक्रिया समाप्त कर दी है।

no_conn

जहां प्रक्रिया स्थित है वहां नोड का कोई संबंध नहीं है।

जानकारी

अधिक जानकारी, यदि कोई हो। यदि प्रक्रिया को ब्रेकपॉइंट पर रोक दिया जाता है, तो फ़ील्ड में स्थान {Module,Line} बारे में जानकारी होती है। यदि प्रक्रिया समाप्त हो गई है, तो फ़ील्ड में बाहर निकलने का कारण होता है।

फ़ाइल मेनू

सेटिंग लोड करें ...

सहेजना सेटिंग्स का उपयोग करके पहले से सहेजी गई फ़ाइल से डीबगर सेटिंग्स को लोड करने और पुनर्स्थापित करने की कोशिश करता है ... (नीचे देखें)। किसी भी त्रुटि को चुपचाप नजरअंदाज कर दिया जाता है।

ध्यान दें कि Erlang / OTP R16B01 या बाद में सहेजी गई सेटिंग्स Erlang / OTP R16B या इससे पहले पढ़ी नहीं जा सकती हैं।

समायोजन बचाओ...

फ़ाइल में डीबगर सेटिंग्स सहेजता है। सेटिंग्स में व्याख्या की गई फ़ाइलों का सेट, ब्रेकप्वाइंट और चयनित विकल्प शामिल हैं। लोड सेटिंग्स ... (ऊपर देखें) का उपयोग करके बाद के डीबगर सत्र में सेटिंग्स को पुनर्स्थापित किया जा सकता है। किसी भी त्रुटि को चुपचाप नजरअंदाज कर दिया जाता है।

बाहर जाएं

बंद हो जाता है डिबगर।

मेनू संपादित करें

ताज़ा करना

डीबग की गई प्रक्रियाओं के बारे में जानकारी अपडेट करता है। सभी समाप्त प्रक्रियाओं के बारे में जानकारी खिड़की से हटा दी जाती है। समाप्त प्रक्रियाओं के लिए सभी संलग्न प्रक्रिया विंडो बंद हैं।

सभी को मार डालो

exit(Pid,kill) का उपयोग करके विंडो में सूचीबद्ध सभी प्रक्रियाओं को समाप्त करता है।

मॉड्यूल मेनू

व्याख्या ...

Interpret Modules window खोलता है, जहां व्याख्या किए जाने वाले नए मॉड्यूल निर्दिष्ट किए जा सकते हैं।

सभी हटा दो

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

प्रत्येक व्याख्या किए गए मॉड्यूल के लिए, एक मॉड्यूल को निम्नलिखित सबमेनू के साथ मॉड्यूल मेनू में जोड़ा जाता है:

हटाना

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

राय

चयनित मॉड्यूल की सामग्री को प्रदर्शित करता है, एक View Module window

प्रक्रिया मेनू

निम्न मेनू आइटम वर्तमान में चयनित प्रक्रिया पर लागू होते हैं, बशर्ते कि इसे एक ब्रेकपॉइंट पर रोका गया हो (विवरण के लिए, खंड Attach Process window ):

चरण
आगामी
जारी रहना
समाप्त

निम्न मेनू आइटम वर्तमान में चयनित प्रक्रिया पर लागू होते हैं:

संलग्न करें

प्रक्रिया के लिए देता है और एक Attach Process window

हत्या

exit(Pid,kill) का उपयोग करके प्रक्रिया को समाप्त करता है।

तोड़ो मेनू

इस मेनू में आइटम का उपयोग ब्रेकपॉइंट बनाने और हटाने के लिए किया जाता है। विवरण के लिए, अनुभाग breakpoints देखें।

रेखा अवरोध...

एक लाइन ब्रेकपॉइंट सेट करता है।

सशर्त विराम ...

एक सशर्त विराम बिंदु निर्धारित करता है।

फंक्शन ब्रेक ...

एक फ़ंक्शन ब्रेकपॉइंट सेट करता है।

सभी को सक्षम करें

सभी विराम बिंदु सक्षम करता है।

सबको सक्षम कर दो

सभी विराम बिंदुओं को निष्क्रिय करता है।

सभी हटा दो

सभी विराम बिंदुओं को निकालता है।

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

विकल्प मेनू

ट्रेस विंडो

Attach Process window में दिखाई देने वाले क्षेत्रों को सेट करता है। मौजूदा अटैच प्रोसेस विंडो को प्रभावित नहीं करता है।

ऑटो संलग्न करें

घटनाओं को सेट करता है एक डीबग की गई प्रक्रिया को स्वचालित रूप से संलग्न किया जाना है। मौजूदा डीबग की गई प्रक्रियाओं को प्रभावित करता है।

  • पहला कॉल - पहली बार एक प्रक्रिया एक व्याख्या किए गए मॉड्यूल में एक फ़ंक्शन को कॉल करती है।

  • बाहर निकलने पर - प्रक्रिया समाप्ति पर।

  • ब्रेक पर - जब कोई प्रक्रिया ब्रेकपॉइंट तक पहुंचती है।

स्टैक ट्रेस

स्टैक ट्रेस विकल्प सेट करता है, अनुभाग Stack Trace देखें। मौजूदा डीबग की गई प्रक्रियाओं को प्रभावित नहीं करता है।

  • स्टैक ऑन, टेल - सभी मौजूदा कॉल के बारे में जानकारी बचाता है।

  • स्टैक ऑन, नो टेल - वर्तमान कॉल के बारे में जानकारी सहेजता है, पिछली जानकारी को त्यागने पर जब टेल रीर्सिव कॉल किया जाता है।

  • स्टैक ऑफ - वर्तमान कॉल के बारे में कोई जानकारी नहीं बचाता है।

स्ट्रिंग्स

पूर्णांक सूचियों को स्ट्रिंग्स के रूप में मुद्रित करने के लिए सेट करता है। मौजूदा डीबग की गई प्रक्रियाओं को प्रभावित नहीं करता है।

  • + PC ध्वज की श्रेणी का उपयोग करें - erl(1) ध्वज +pc द्वारा निर्धारित मुद्रण योग्य वर्ण श्रेणी का उपयोग करता है।

वापस ट्रेस आकार ...

अटैच प्रक्रिया विंडो से कॉल स्टैक का निरीक्षण करते समय कितने कॉल फ़्रेम प्राप्त किए जाते हैं। मौजूदा अटैच प्रोसेस विंडो को प्रभावित नहीं करता है।

विंडोज मेनू

प्रत्येक खुली डीबगर विंडो के लिए एक मेनू आइटम शामिल है। किसी एक आइटम का चयन करना संबंधित विंडो को बढ़ाता है।

मदद मेनू

मदद

डिबगर दस्तावेज़ दिखाता है। इस फ़ंक्शन के लिए वेब ब्राउज़र की आवश्यकता होती है।

2.5 इंटरप्रेट मॉड्यूल विंडो

इंटरप्रिट मॉड्यूल विंडो का उपयोग व्याख्या करने के लिए किस मॉड्यूल का चयन करने के लिए किया जाता है। प्रारंभ में, विंडो वर्तमान कार्यशील निर्देशिका के मॉड्यूल ( erl फ़ाइलें) और उपनिर्देशिका प्रदर्शित करती है।

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

ऐसे मॉड्यूल जिनके लिए ये आवश्यकताएं पूरी नहीं होती हैं, व्याख्या योग्य नहीं हैं और इसलिए इन्हें कोष्ठकों के भीतर प्रदर्शित किया जाता है।

विकल्प debug_info डिबग जानकारी या सार कोड को .beam फ़ाइल में जोड़ने का कारण .beam है। यह फ़ाइल का आकार बढ़ाता है और स्रोत कोड को फिर से बनाना संभव बनाता है। इसलिए यह लक्ष्य प्रणालियों के उद्देश्य से कोड में डिबग जानकारी शामिल नहीं करने की सिफारिश की जाती है।

erlc का उपयोग करके डिबग जानकारी के साथ कोड संकलित करने का एक उदाहरण:

% erlc +debug_info module.erl

Erlang शेल से डिबग जानकारी के साथ कोड संकलित करने का एक उदाहरण:

4> c(module, debug_info).

चित्रा 2.5: मॉड्यूल विंडो की व्याख्या

फ़ाइल पदानुक्रम ब्राउज़ करने के लिए और उपयुक्त मॉड्यूल की व्याख्या करने के लिए, या तो एक मॉड्यूल नाम का चयन करें और चुनें (या कैरिज रिटर्न दबाएं), या मॉड्यूल नाम पर डबल-क्लिक करें। व्याख्या किए गए मॉड्यूल में erl src प्रकार होता है।

चुने हुए निर्देशिका में सभी प्रदर्शित मॉड्यूल की व्याख्या करने के लिए, सभी पर क्लिक करें।

विंडो बंद करने के लिए, संपन्न पर क्लिक करें।

ध्यान दें

जब डिबगर को वैश्विक मोड में शुरू किया जाता है (जो डिफ़ॉल्ट है, debugger:start/0 देखें debugger:start/0 ), व्याख्या के लिए जोड़े गए मॉड्यूल (या हटाए गए) सभी ज्ञात एर्लंग नोड पर जोड़े (या हटाए गए) हैं।

2.6 अटैच प्रोसेस विंडो

अटैच प्रोसेस विंडो से, आप डीबग की गई प्रक्रिया के साथ इंटरैक्ट कर सकते हैं। प्रत्येक प्रक्रिया के लिए एक विंडो खोली गई है जिसे संलग्न किया गया है। ध्यान दें कि किसी प्रक्रिया में संलग्न होने पर, इसका निष्पादन स्वतः बंद हो जाता है।

चित्र 2.6: प्रक्रिया विंडो संलग्न करें

विंडो को निम्नलिखित पांच भागों में विभाजित किया गया है:

  • कोड क्षेत्र, निष्पादित किया जा रहा कोड प्रदर्शित करता है। कोड इंडेंटेड है और प्रत्येक लाइन अपनी लाइन नंबर के साथ उपसर्ग करती है। यदि प्रक्रिया निष्पादन रोक दिया जाता है, तो वर्तमान लाइन को --> के साथ चिह्नित किया जाता है। एक पंक्ति में एक मौजूदा विराम बिंदु एक स्टॉप प्रतीक के साथ चिह्नित है। उदाहरण में दिखाया गया है, निष्पादन 6/6 पर बंद हो गया, fac/1 के निष्पादन से पहले।

    सक्रिय विराम बिंदु लाल और निष्क्रिय विराम बिंदु नीले रंग में प्रदर्शित होते हैं।

  • प्रक्रिया मेनू में अक्सर उपयोग किए जाने वाले कार्यों के त्वरित उपयोग के लिए बटन के साथ बटन क्षेत्र।

  • मूल्यांकनकर्ता क्षेत्र, जहां आप डिबग किए गए प्रक्रिया के संदर्भ में कार्यों का मूल्यांकन कर सकते हैं, अगर उस प्रक्रिया का निष्पादन रोक दिया जाता है।

  • बाइंडिंग क्षेत्र, सभी चर बाइंडिंग प्रदर्शित करता है। यदि आप एक चर नाम पर क्लिक करते हैं, तो मान को मूल्यांकनकर्ता क्षेत्र में प्रदर्शित किया जाता है। एक चर खोलने के लिए एक चर नाम पर डबल-क्लिक करें जहां चर मान संपादित किया जा सकता है। ध्यान दें कि जब तक उन्हें रनिंग सिस्टम में प्रदर्शित नहीं किया जा सकता है तब तक pid, port, reference या fun values ​​को एडिट नहीं किया जा सकता है।

  • ट्रेस क्षेत्र, जो प्रक्रिया के लिए एक ट्रेस आउटपुट प्रदर्शित करता है।

    ++ (N) <L>

    फ़ंक्शन कॉल, जहां N कॉल स्तर है और L लाइन नंबर है।

    -- (N)

    फ़ंक्शन वापसी मान

    ==> Pid : Msg

    संदेश Msg Pid को संसाधित करने के लिए भेजा जाता है।

    <== Msg

    संदेश Msg प्राप्त होता है।

    ++ (N) receive

    किसी प्रतीक्षा में प्रतीक्षा receive

    ++ (N) receive with timeout

    प्रतीक्षा में प्रतीक्षा receive...after

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

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

फ़ाइल मेनू

बंद करे

इस विंडो को बंद कर देता है और प्रक्रिया से अलग हो जाता है।

मेनू संपादित करें

लाइन पर जाएं ...

एक निर्दिष्ट लाइन नंबर पर जाता है।

खोज...

एक निर्दिष्ट स्ट्रिंग के लिए खोज करता है।

प्रक्रिया मेनू

चरण

वर्तमान कोड लाइन को निष्पादित करता है, किसी भी (व्याख्या) फ़ंक्शन कॉल में कदम रखता है।

आगामी

वर्तमान कोड लाइन निष्पादित करता है और अगली पंक्ति में रुकता है।

जारी रहना

निष्पादन को जारी रखता है।

समाप्त

वर्तमान फ़ंक्शन के लौटने तक निष्पादन को जारी रखता है।

छोड़ें

वर्तमान कोड लाइन को छोड़ देता है और अगली पंक्ति में रुक जाता है। यदि फ़ंक्शन बॉडी में अंतिम पंक्ति पर उपयोग किया जाता है, तो फ़ंक्शन वापस skipped

समय समाप्त

स्टेटमेंट receive...after करने के receive...after टाइम-आउट का अनुकरण करता है receive...after स्टेटमेंट के receive...after

रुकें

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

कहा पे

सत्यापित करता है कि निष्पादन का वर्तमान स्थान कोड क्षेत्र में दिखाई देता है।

हत्या

exit(Pid,kill) का उपयोग करके प्रक्रिया को समाप्त करता है।

संदेश

प्रक्रिया की संदेश कतार का निरीक्षण करता है। मूल्यांकनकर्ता क्षेत्र में कतार प्रदर्शित की जाती है।

पीछे ट्रेस

प्रक्रिया का पिछला ट्रेस प्रदर्शित करता है, ट्रेस क्षेत्र में स्टैक पर वर्तमान फ़ंक्शन कॉल का सारांश। यह आवश्यक है कि ट्रेस क्षेत्र दिखाई दे और स्टैक ट्रेस विकल्प स्टैक ऑन, टेल या स्टैक ऑन, नो टेल

ऊपर

स्टैक पर पिछले फ़ंक्शन कॉल का निरीक्षण करता है, स्थान और चर बाइंडिंग दिखा रहा है।

नीचे

स्थान और चर बाइंडिंग दिखाते हुए, स्टैक पर अगले फ़ंक्शन कॉल का निरीक्षण करता है।

विकल्प मेनू

ट्रेस विंडो

सेट जो क्षेत्रों को दिखाई दे रहे हैं। अन्य अटैच प्रोसेस विंडो को प्रभावित नहीं करता है।

स्टैक ट्रेस

Monitor window में समान, लेकिन केवल डीबग की गई प्रक्रिया को प्रभावित करता है जिससे विंडो जुड़ी हुई है।

स्ट्रिंग्स

Monitor window में समान, लेकिन केवल डीबग की गई प्रक्रिया को प्रभावित करता है जिससे विंडो जुड़ी हुई है।

वापस ट्रेस आकार ...

कॉल स्टैक का निरीक्षण करते समय निर्धारित करता है कि कितने कॉल फ्रेम प्राप्त किए जाने हैं। अन्य अटैच प्रोसेस विंडो को प्रभावित नहीं करता है।

विराम, विंडोज, और मदद मेनू

ब्रेक , विंडोज और हेल्प मेनू Monitor Window में समान हैं, सिवाय इसके कि ब्रेक मेनू केवल स्थानीय ब्रेकप्वाइंट पर लागू होता है।

2.7 मॉड्यूल विंडो देखें

दृश्य मॉड्यूल विंडो व्याख्या किए गए मॉड्यूल की सामग्री को प्रदर्शित करता है और ब्रेकप्वाइंट सेट करना संभव बनाता है।

चित्र 2.7: मॉड्यूल विंडो देखें

स्रोत कोड इंडेंटेड है और प्रत्येक लाइन अपनी लाइन नंबर के साथ उपसर्ग करती है।

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

ब्रेकप्वाइंट को स्टॉप सिंबल के साथ चिह्नित किया जाता है।

फ़ाइल और संपादन मेनू

फ़ाइल और संपादन मेनू Attach Process Window

विराम, विंडोज, और मदद मेनू

ब्रेक , विंडोज और हेल्प मेनू Monitor Window में समान हैं, सिवाय इसके कि ब्रेक मेनू केवल स्थानीय ब्रेकप्वाइंट पर लागू होता है।

2.8 प्रदर्शन

नियमित रूप से संकलित मॉड्यूल की तुलना में व्याख्या किए गए कोड का निष्पादन स्वाभाविक रूप से धीमा है। डीबगर का उपयोग करने से सिस्टम में प्रक्रियाओं की संख्या भी बढ़ जाती है, क्योंकि प्रत्येक डीबग की गई प्रक्रिया के लिए एक अन्य प्रक्रिया (मेटा प्रक्रिया) बनाई जाती है।

यह भी ध्यान रखने योग्य है कि डीबगर होने पर टाइमर के साथ प्रोग्राम अलग तरीके से व्यवहार कर सकते हैं। यह विशेष रूप से सच है जब एक प्रक्रिया के निष्पादन को रोकते हैं (उदाहरण के लिए, एक विराम बिंदु पर)। टाइम-आउट तब अन्य प्रक्रियाओं में हो सकता है जो निष्पादन को सामान्य रूप से जारी रखते हैं।

2.9 कोड लोड हो रहा है तंत्र

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

2.10 डिबगिंग रिमोट नोड्स

debugger:start/1 का उपयोग करके, आप यह निर्दिष्ट कर सकते हैं कि क्या डिबगर को स्थानीय या वैश्विक मोड में शुरू किया जाना है:

debugger:start(local | global)

यदि कोई तर्क नहीं दिया जाता है, तो डिबगर वैश्विक मोड में शुरू होता है।

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

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