Erlang 21

int




erlang

int

मॉड्यूल

पूर्णांक

मॉड्यूल सारांश

दुभाषिया इंटरफ़ेस।

विवरण

Erlang दुभाषिया ब्रेकपॉइंट और कोड के निष्पादन के लिए स्टेपवाइज तंत्र प्रदान करता है। यह मुख्य रूप से डीबगर द्वारा उपयोग किए जाने का इरादा है, उपयोगकर्ता की मार्गदर्शिका और debugger(3)

निम्नलिखित शेल से किया जा सकता है:

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

व्याख्या किए गए कोड को निष्पादित करने की प्रक्रिया में संलग्न करके, चर बाइंडिंग की जांच करना और चरणबद्ध निष्पादन का आदेश देना संभव है। यह एक तीसरी प्रक्रिया के माध्यम से / से प्रक्रिया को जानकारी भेजने और प्राप्त करने के द्वारा किया जाता है, जिसे मेटा प्रक्रिया कहा जाता है। आप अपनी खुद की संलग्न प्रक्रिया को लागू कर सकते हैं। उपलब्ध कार्यों के लिए int.erl देखें और संभावित संदेशों के लिए dbg_wx_trace.erl

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

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

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

एक ब्रेकपॉइंट में निम्नलिखित हैं:

  • एक स्थिति, जो सक्रिय या निष्क्रिय है । एक निष्क्रिय ब्रेकपॉइंट को अनदेखा किया जाता है।
  • एक ट्रिगर कार्रवाई। जब एक ब्रेकपॉइंट पहुंच जाता है, तो ट्रिगर एक्शन निर्दिष्ट करता है यदि ब्रेकपॉइंट को सक्रिय ( सक्षम ) के रूप में जारी रखना है, या निष्क्रिय ( अक्षम ) बनना है, या हटाया जाना ( हटाना ) है।
  • वैकल्पिक रूप से एक संबद्ध स्थिति। एक शर्त टपल {Module,Name} । जब ब्रेकपॉइंट पहुंच जाता है, तो Module:Name(Bindings) कहा जाता है। यदि यह true मूल्यांकन करता true , तो निष्पादन रुक जाता है। यदि यह false मूल्यांकन करता false , तो विराम बिंदु को अनदेखा किया जाता है। Bindings में वर्तमान चर बाइंडिंग शामिल हैं। किसी निर्दिष्ट चर के लिए मान प्राप्त करने के लिए, get_binding उपयोग get_binding

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

निर्यात

i (AbsModule) -> {मॉड्यूल, मॉड्यूल} | त्रुटि
i (AbsModules) -> ठीक है
नी (AbsModule) -> {मॉड्यूल, मॉड्यूल} | त्रुटि
नी (AbsModules) -> ठीक है

प्रकार

निर्दिष्ट मॉड्यूल की व्याख्या करता है। i/1 केवल वर्तमान नोड पर मॉड्यूल की व्याख्या करता है। ni/1 सभी ज्ञात नोड्स पर मॉड्यूल की व्याख्या करता है।

एक मॉड्यूल को इसके मॉड्यूल नाम (परमाणु) या फ़ाइल नाम से निर्दिष्ट किया जा सकता है।

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

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

ध्यान दें

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

यदि मॉड्यूल की व्याख्या की गई थी, तो फ़ंक्शन {module,Module} देता है, अन्यथा error वापस आ जाती है।

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

n (AbsModule) -> ठीक है
nn (AbsModule) -> ठीक है

प्रकार

निर्दिष्ट मॉड्यूल की व्याख्या करना बंद कर देता है। n/1 केवल वर्तमान नोड पर मॉड्यूल की व्याख्या करना बंद कर देता है। nn/1 सभी ज्ञात नोड्स पर मॉड्यूल की व्याख्या करना बंद कर देता है।

i/1 और ni/1 , एक मॉड्यूल को इसके मॉड्यूल नाम या फ़ाइल नाम से निर्दिष्ट किया जा सकता है।

व्याख्या की गई () -> [मॉड्यूल]

प्रकार

सभी व्याख्या किए गए मॉड्यूल के साथ एक सूची लौटाता है।

फ़ाइल (मॉड्यूल) -> फ़ाइल | {त्रुटि, not_loaded}

प्रकार

एक व्याख्या किए गए मॉड्यूल Module लिए स्रोत कोड फ़ाइल नाम लौटाता है।

व्याख्यात्मक (AbsModule) -> सच | {त्रुटि, कारण}

प्रकार

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

यदि सभी लागू होते हैं, तो यह फ़ंक्शन true :

  • मॉड्यूल के लिए स्रोत कोड और ऑब्जेक्ट कोड दोनों पाए जाते हैं।
  • मॉड्यूल को debug_info सेट विकल्प के साथ संकलित किया गया है।
  • मॉड्यूल कर्नेल, STDLIB, GS या डीबगर में से किसी भी अनुप्रयोग से संबंधित नहीं है।

यदि मॉड्यूल की व्याख्या नहीं की जा सकती {error,Reason} तो फ़ंक्शन {error,Reason} लौटाता है। Reason में निम्न मान हो सकते हैं:

no_src

कोई स्रोत कोड नहीं मिला है। यह माना जाता है कि स्रोत कोड और ऑब्जेक्ट कोड या तो एक ही निर्देशिका में, या एक दूसरे के बगल में src और ebin निर्देशिका में स्थित हैं।

no_beam

कोई ऑब्जेक्ट कोड नहीं मिला। यह माना जाता है कि स्रोत कोड और ऑब्जेक्ट कोड या तो एक ही निर्देशिका में, या एक दूसरे के बगल में src और ebin निर्देशिका में स्थित हैं।

no_debug_info

मॉड्यूल को debug_info सेट विकल्प के साथ संकलित नहीं किया गया है।

badarg

AbsModule नहीं मिला है। ऐसा इसलिए हो सकता है क्योंकि निर्दिष्ट फ़ाइल मौजूद नहीं है, या क्योंकि code:which/1 BEAM फ़ाइल नाम नहीं लौटाता है, जो न केवल गैर-मौजूदा मॉड्यूल के लिए, बल्कि प्रीलोडेड या कवर-संकलित मॉड्यूल के लिए भी है।

{app,App}

यदि एप्लिकेशन इन एप्लिकेशनों में से एक से संबंधित है, तो App kernel , stdlib , gs या debugger है।

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

auto_attach () -> गलत | {झंडे, समारोह}
auto_attach (गलत)
auto_attach (फ़्लैग, फ़ंक्शन)

प्रकार

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

  • init - जब कोई प्रक्रिया पहली बार एक व्याख्या किए गए फ़ंक्शन को बुलाती है, तो संलग्न करें।
  • break - जब भी कोई प्रक्रिया ब्रेकपॉइंट तक पहुंचती है, तब संलग्न करें।
  • exit - एक प्रक्रिया समाप्त होने पर संलग्न करें।

जब निर्दिष्ट घटना होती है, तो फ़ंक्शन Function को निम्न के रूप में कहा जाता है:

spawn(Module, Name, [Pid | Args])

Pid व्याख्या कोड को निष्पादित करने वाली प्रक्रिया का pid है।

स्टैक_ट्रेस () -> फ्लैग
stack_trace (फ्लैग)

प्रकार

हो जाता है और स्टैक में कॉल फ्रेम को बचाने के लिए कैसे सेट करता है। कॉल फ़्रेम सहेजना एक प्रक्रिया की कॉल श्रृंखला का निरीक्षण करना संभव बनाता है, और स्टैक ट्रेस का अनुकरण करने के लिए भी उपयोग किया जाता है यदि कोई त्रुटि (वर्ग त्रुटि का अपवाद) होती है। निम्नलिखित झंडे निर्दिष्ट किए जा सकते हैं:

all

सभी वर्तमान कॉल के बारे में जानकारी सहेजें, अर्थात्, फ़ंक्शन कॉल जो अभी तक एक मान नहीं लौटाए हैं।

no_tail

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

false

करंट के बारे में कोई जानकारी नहीं बचाएं।

ब्रेक (मॉड्यूल, लाइन) -> ठीक | {त्रुटि, break_exists}

प्रकार

Module में Line पर एक विराम बिंदु बनाता है।

delete_break (मॉड्यूल, लाइन) -> ठीक है

प्रकार

Module में Line पर विराम बिंदु को हटाता है।

ब्रेक_इन (मॉड्यूल, नाम, योग्यता) -> ठीक | {त्रुटि, function_not_found}

प्रकार

फ़ंक्शन Module:Name/Arity के प्रत्येक खंड की पहली पंक्ति में एक ब्रेकपॉइंट बनाता है Module:Name/Arity

del_break_in (मॉड्यूल, नाम, योग्यता) -> ठीक | {त्रुटि, function_not_found}

प्रकार

फ़ंक्शन Module:Name/Arity के प्रत्येक खंड की पहली पंक्ति में विराम Module:Name/Arity

no_break () -> ठीक है
no_break (मॉड्यूल) -> ठीक है

Module में सभी ब्रेकप्वाइंट, या सभी ब्रेकप्वाइंट हटाता है।

disable_break (मॉड्यूल, लाइन) -> ठीक है

प्रकार

Module में Line पर ब्रेकपॉइंट को निष्क्रिय बनाता है।

enable_break (मॉड्यूल, लाइन) -> ठीक है

प्रकार

सक्रिय Module में Line पर विराम बिंदु बनाता है।

एक्शन_ट_ब्रेक (मॉड्यूल, लाइन, एक्शन) -> ठीक है

प्रकार

Module टू Action में Line पर ब्रेकपॉइंट की ट्रिगर कार्रवाई सेट करता है।

test_at_break (मॉड्यूल, रेखा, कार्य) -> ठीक है

प्रकार

Module से Function में Line पर ब्रेकपॉइंट की सशर्त परीक्षा सेट करता है। फ़ंक्शन को अनुभाग Breakpoints में निर्दिष्ट आवश्यकताओं को पूरा करना चाहिए।

get_binding (वार, बाइंडिंग) -> {मूल्य, मूल्य} | अबाध

प्रकार

Var के बंधन को पुनः प्राप्त करता है। इस फ़ंक्शन का उद्देश्य ब्रेकपॉइंट के सशर्त फ़ंक्शन द्वारा उपयोग किया जाना है।

all_breaks () -> [ब्रेक]
all_breaks (मॉड्यूल) -> [ब्रेक]

प्रकार

Module में सभी ब्रेकप्वाइंट, या सभी ब्रेकप्वाइंट हो जाता है।

स्नैपशॉट () -> [स्नैपशॉट]

प्रकार

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

  • Pid - प्रक्रिया पहचानकर्ता।
  • Function - प्रक्रिया द्वारा पहली बार व्याख्या की गई फ़ंक्शन।
  • Status - प्रक्रिया की वर्तमान स्थिति।
  • Info - अधिक जानकारी।

Status निम्न में से एक है:

  • idle - प्रक्रिया अब व्याख्या कोड निष्पादित नहीं कर रही है। Info={}
  • running - प्रक्रिया चल रही है। Info={}
  • waiting - प्रक्रिया एक receive पर प्रतीक्षा कर रही है। Info={}
  • break - प्रक्रिया निष्पादन रोक दिया जाता है, आम तौर पर एक ब्रेकपॉइंट पर। Info={Module,Line}
  • exit - प्रक्रिया समाप्त हो गई है। Info=ExitReason
  • no_conn - कनेक्शन नोड के लिए नीचे है जहां प्रक्रिया चल रही है। Info={}
clear () -> ठीक है

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

जारी (पीआईडी) -> ठीक | {त्रुटि, not_interpreted}
जारी रखें (X, Y, Z) -> ठीक है | {त्रुटि, not_interpreted}

प्रकार

Pid या c:pid(X,Y,Z) लिए प्रक्रिया निष्पादन शुरू करता है।