Erlang 21

ttb




erlang

ttb

मॉड्यूल

TTB

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

वितरित सिस्टम के लिए ट्रेस उपकरण बनाने का आधार।

विवरण

ट्रेस टूल बिल्डर, ttb , वितरित सिस्टम के लिए ट्रेस उपकरण बनाने का एक आधार है।

ttb का उपयोग करते ttb , समानांतर में अनुप्रयोग Runtime_Tools में मॉड्यूल ttb का उपयोग न करें।

निर्यात

start_trace (नोड्स, पैटर्न, फ्लैगस्पेक, ऑप्स) -> परिणाम

प्रकार

यह फ़ंक्शन एक शॉर्टकट है जो एक कमांड के साथ ट्रेस शुरू करने की अनुमति देता है। Patterns में प्रत्येक टपल को एक सूची में बदल दिया जाता है, जो बदले में ttb:tpl/2,3,4 में उत्तीर्ण होता है।

कॉल:

> ttb:start_trace([Node, OtherNode], [{mod, foo, []}, {mod, bar, 2}], {all, call}, [{file, File}, {handler,{fun myhandler/4, S}}]).

के बराबर है:

> ttb:start_trace([Node, OtherNode], [{file, File}, {handler,{fun myhandler/4, S}}]), ttb:tpl(mod, foo, []), ttb:tpl(mod, bar, 2, []), ttb:p(all, call).
अनुरेखक () -> परिणाम

tracer(node()) बराबर।

अनुरेखक (शॉर्टकट) -> परिणाम

प्रकार

सामान्य अनुरेखण सेटिंग्स के लिए आसान शॉर्टकट।

shell tracer(node(),[{file, {local, "ttb"}}, shell])

dbg tracer(node(),[{shell, only}]) बराबर है।

अनुरेखक (नोड्स) -> परिणाम

tracer(Nodes,[]) समतुल्य tracer(Nodes,[])

अनुरेखक (नोड्स, ऑप्स) -> परिणाम

प्रकार

सभी निर्दिष्ट नोड्स पर एक फ़ाइल ट्रेस पोर्ट शुरू करता है और उसी पोर्ट पर अनुक्रमिक अनुरेखण के लिए सिस्टम ट्रैसर को इंगित करता है।

विकल्प:

Filename

निर्दिष्ट Filename नाम नोड नाम के साथ उपसर्ग है। डिफ़ॉल्ट Filename ttb

File={wrap,Filename,Size,Count}

उपयोग किया जा सकता है अगर ट्रेस लॉग का आकार सीमित होना चाहिए। डिफ़ॉल्ट मान Size=128*1024 और Count=8

Client

डिस्क रहित नोड्स को ट्रेस करते समय, ttb को डिस्क एक्सेस के साथ बाहरी "ट्रेस कंट्रोल नोड" से शुरू किया जाना चाहिए, और Client को {local, File} होना चाहिए। सभी ट्रेस जानकारी फिर ट्रेस कंट्रोल नोड को भेजी जाती है, जहां इसे फ़ाइल में लिखा जाता है।

queue_size

जब शेल या {local,File} ट्रेस किया जाता है, तो आंतरिक रूप से एक आईपी ट्रेस ड्राइवर का उपयोग किया जाता है। IP ट्रेस ड्रायवर के पास अधिक से अधिक QueueSize संदेशों की एक कतार होती है जो वितरित होने की प्रतीक्षा कर रहे हैं। यदि ड्राइवर संदेशों को उतनी तेजी से वितरित नहीं कर सकता जितना वे उत्पादित करते हैं, तो कतार का आकार अधिक हो सकता है और संदेश छोड़ दिए जाते हैं। यह पैरामीटर वैकल्पिक है, और केवल उपयोगी है यदि कई {drop,N} ट्रेस संदेश ट्रेस हैंडलर द्वारा प्राप्त किए जाते हैं। इसका कोई अर्थ नहीं है यदि शेल या {local,File} का उपयोग नहीं किया जाता है। IP ट्रेस ड्राइवर के बारे में अधिक जानकारी के लिए dbg:trace_port/2 देखें।

process_info

इंगित करता है कि प्रक्रिया की जानकारी एकत्र की जानी है। यदि PI = true (जो डिफ़ॉल्ट है), प्रत्येक प्रक्रिया पहचानकर्ता Pid को एक tuple {Pid,ProcessInfo,Node} से बदल दिया जाता है, जहां ProcessInfo पंजीकृत प्रक्रिया का नाम है, इसका विश्व स्तर पर पंजीकृत नाम, या इसका प्रारंभिक कार्य है। इस कार्यक्षमता को बंद करने के लिए, PI = false सेट करें।

{shell, ShellSpec}

संदेश जो ट्रेस संदेशों को ट्रेसिंग प्रक्रिया द्वारा प्राप्त होते हैं, उन्हें कंसोल पर मुद्रित किया जाना है। इसका मतलब है क्लाइंट {local, File} ट्रेस। यदि ShellSpec only ( true बजाय) है, तो कोई ट्रेस लॉग संग्रहीत नहीं हैं।

shell

{shell, true} लिए शॉर्टकट।

timer

इंगित करता है कि MSec मिलीसेकंड के बाद ट्रेस को स्वचालित रूप से रोका जाना है। StopOpts को StopOpts को कमांड करने के लिए पास किया ttb:stop/2 यदि निर्दिष्ट किया गया है (डिफ़ॉल्ट है [] )। ध्यान दें कि समय लगभग अनुमानित है, क्योंकि नेटवर्क संचार से संबंधित देरी हमेशा मौजूद रहती है। ttb:p/2 जारी होने के बाद टाइमर शुरू होता है, इसलिए आप अपने ट्रेस पैटर्न को पहले सेट कर सकते हैं।

overload_check

ट्रेस के तहत नोड्स पर अधिभार जाँच को सक्षम करने की अनुमति देता है। Module:Function(check) प्रत्येक MSec मिलीसेकंड किया जाता है। यदि चेक true , तो ट्रेसिंग एक निर्दिष्ट नोड पर अक्षम है।

Module:Function को कम से कम तीन परमाणुओं को संभालने में सक्षम होना चाहिए: init , check , और stop init और stop आपको चेक वातावरण को शुरू करने और साफ करने की अनुमति देता है।

जब एक नोड अतिभारित हो जाता है, तो ttb:p/2 या ttb:tp/2,3,4 से किसी भी कमांड को जारी करना संभव नहीं है ttb:tp/2,3,4 परिवार, क्योंकि यह असंगत अनुरेखण राज्य (विभिन्न नोड पर अलग ट्रेस विनिर्देशों) को जन्म देगा।

flush

समय-समय पर सभी फ़ाइल ट्रेस पोर्ट क्लाइंट को फ्लश करता है (देखें dbg:flush_trace_port/1 )। सक्षम होने पर, बफ़र्स को प्रत्येक MSec मिलीसेकंड से मुक्त किया जाता है। इस विकल्प को {file, {local, File}} ट्रेसिंग के साथ अनुमति नहीं है।

{resume, FetchTimeout}

ऑटोरस्यूम सुविधा को सक्षम करता है। सक्षम होने पर, दूरस्थ नोड्स पुनः आरंभ होने पर कंट्रोलिंग नोड को फिर से कनेक्ट करने का प्रयास करते हैं। सुविधा के लिए आवेदन Runtime_Tools शुरू करने की आवश्यकता होती है (ताकि यह .boot स्क्रिप्ट में मौजूद हो अगर .boot नोड्स .boot साथ चलते हैं)। यदि यह संभव नहीं है, तो Runtime_Tools का उपयोग करके दूरस्थ रूप से शुरू करके फिर से शुरू किया जा सकता है rpc:call/4

ttb ट्रेस को पुन: ttb करने से पहले सभी लॉग को फिर से कनेक्ट करने वाले नोड से लाने की कोशिश करता है। यह FetchTimeout मिलीसेकंड के भीतर समाप्त होना चाहिए या निरस्त किया जाना चाहिए।

डिफ़ॉल्ट रूप से, ऑटोस्टार्ट जानकारी प्रत्येक नोड पर ttb_autostart.bin नामक फ़ाइल में संग्रहीत की जाती है। यदि यह वांछित नहीं है (उदाहरण के लिए, डिस्कलेस नोड्स पर), एक कस्टम मॉड्यूल जो ttb_autostart_module सूचना भंडारण और पुनर्प्राप्ति से निपटने के लिए आवेदन Runtime_Tools के लिए पर्यावरण चर ttb_autostart_module निर्दिष्ट करके प्रदान किया जा सकता है। मॉड्यूल को निम्नलिखित API का जवाब देना चाहिए:

write_config(Data) -> ok

आगे पुनर्प्राप्ति के लिए प्रदान किए गए डेटा को संग्रहीत करता है। यह महसूस करना महत्वपूर्ण है कि उपयोग किया गया डेटा संग्रहण नोड क्रैश से प्रभावित नहीं होना चाहिए।

read_config() -> {ok, Data} | {error, Error}

कॉन्फ़िगरेशन को write_config(Data) साथ संग्रहीत करता है।

delete_config() -> ok

write_config(Data) कॉन्‍फ़िगरेशन को write_config(Data) साथ संग्रहीत किया जाता है। ध्यान दें कि इस कॉल के बाद किसी भी कॉल को read_config पर read_config होगा {error, Error}

resume मतलब है डिफ़ॉल्ट FetchTimeout , जो 10 सेकंड है

पी (आइटम, झंडे) -> वापसी

प्रकार

निर्दिष्ट प्रक्रियाओं या बंदरगाहों पर निर्दिष्ट ट्रेस झंडे सेट करता है। झंडा timestamp हमेशा चालू रहता है।

संभावित ट्रेस झंडे के लिए मॉड्यूल dbg लिए संदर्भ मैनुअल देखें। पैरामीटर MatchDesc वही है जो MatchDesc dbg:p/2 से वापस MatchDesc है।

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

इस आदेश को जारी करना इस ट्रेस के लिए टाइमर शुरू करता है यदि विकल्प timer tracer/2 साथ निर्दिष्ट किया गया है।

tp, tpl, tpe, ctp, ctpl, ctpg, ctpe

इन कार्यों का उपयोग ट्रेस फ़्लैग call , send और ट्रेस पैटर्न को साफ़ करने के लिए 'receive' के साथ किया जाना है।

जब ट्रेस फ़्लैग call को एक प्रक्रिया पर सेट किया जाता है, तो फंक्शन कॉल उस प्रक्रिया पर ट्रेस किया जाता है यदि ट्रेस पैटर्न को फ़ंक्शन के लिए सेट किया जाता है।

send और 'receive' झंडे प्रक्रिया / बंदरगाह द्वारा भेजे गए और प्राप्त सभी संदेशों के अनुरेखण को सक्षम 'receive' tpe साथ निर्धारित ट्रेस पैटर्न संदेश सामग्री, प्रेषक और / या रिसीवर के आधार पर ट्रेस किए गए संदेशों को सीमित कर सकते हैं।

ट्रेस पैटर्न निर्दिष्ट करते हैं कि मैच विनिर्देशों का उपयोग करके किसी फ़ंक्शन या संदेश का पता कैसे लगाया जाए। ERTS User's Guide में मैच विनिर्देशों का वर्णन किया गया है।

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

tp

वैश्विक फ़ंक्शन कॉल पर ट्रेस पैटर्न सेट करता है।

tpl

स्थानीय और वैश्विक फ़ंक्शन कॉल पर ट्रेस पैटर्न सेट करता है।

tpe

संदेशों पर ट्रेस पैटर्न सेट करता है।

ctp

क्लियर्स स्थानीय और वैश्विक फ़ंक्शन कॉल पर पैटर्न का पता लगाता है।

ctpl

स्थानीय फ़ंक्शन कॉल पर पैटर्न का पता लगाता है।

ctpg

ग्लोबल फ़ंक्शन कॉल पर क्लियर्स ट्रेस पैटर्न।

ctpe

संदेशों पर पैटर्न ट्रेस करता है।

ttb:tp(foo_module, caller) के साथ, मैच विनिर्देश शॉर्टकट में से एक का उपयोग किया जा सकता है (उदाहरण के लिए, ttb:tp(foo_module, caller) )।

शॉर्टकट निम्नानुसार हैं:

  • return - [{'_',[],[{return_trace}]}] (वापसी का पता एक निशान से देखें)
  • caller - [{'_',[],[{message,{caller}}]}] (कॉलिंग फ़ंक्शन की रिपोर्ट करें)
  • {codestr, Str} - dbg:fun2ms/1 लिए dbg:fun2ms/1 तर्क तार के रूप में पारित किए गए (उदाहरण: "fun(_) -> return_trace() end" )
list_history () -> इतिहास

प्रकार

ttb लिए सभी कॉल इतिहास में संग्रहीत हैं। यह फ़ंक्शन इतिहास की वर्तमान सामग्री को लौटाता है। किसी भी प्रविष्टि को run_history/1 साथ run_history/1 किया जा सकता है या write_config/2,3 साथ कॉन्फ़िगरेशन फ़ाइल में संग्रहीत किया जा सकता है।

run_history (N) -> ठीक | {त्रुटि, कारण}

प्रकार

इतिहास सूची से निर्दिष्ट प्रविष्टि या प्रविष्टियों को निष्पादित करता है। इतिहास को सूचीबद्ध करने के लिए, list_history/0 उपयोग करें।

write_config (ConfigFile, कॉन्फ़िग)

write_config(ConfigFile,Config,[])

write_config (ConfigFile, config, Opts) -> ठीक | {त्रुटि, कारण}

प्रकार

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

कॉन्फ़िगरेशन फ़ाइल की सामग्री या तो इतिहास से प्राप्त की जा सकती है या सीधे {Mod,Func,Args} सूची के रूप में निर्दिष्ट की जा सकती है।

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

यदि ConfigFile निर्दिष्ट नहीं है या यदि यह [] , तो ConfigFile हटा दिया जाता है और एक नई फ़ाइल बनाई जाती है। यदि ConfigFile Opts = [append] , ConfigFile हटा नहीं है। नई जानकारी फ़ाइल के अंत में संलग्न है।

run_config (ConfigFile) -> ठीक | {त्रुटि, कारण}

प्रकार

निर्दिष्ट कॉन्फ़िगरेशन फ़ाइल में सभी प्रविष्टियों को निष्पादित करता है। ध्यान दें कि अंतिम ट्रेस का इतिहास हमेशा फ़ाइल ttb_last_config में उपलब्ध है।

run_config (ConfigFile, NumList) -> ठीक है | {त्रुटि, कारण}

प्रकार

निर्दिष्ट कॉन्फ़िगरेशन फ़ाइल से चयनित प्रविष्टियों को निष्पादित करें। NumList पूर्णांक की एक सूची है जो प्रविष्टियों को निष्पादित करने की ओर इशारा करता है।

कॉन्फ़िगरेशन फ़ाइल की सामग्री को सूचीबद्ध करने के लिए, list_config/1 उपयोग करें।

ध्यान दें कि अंतिम ट्रेस का इतिहास हमेशा फ़ाइल ttb_last_config में उपलब्ध है।

list_config (ConfigFile) -> विन्यास | {त्रुटि, कारण}

प्रकार

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

write_trace_info (कुंजी, जानकारी) -> ठीक है

प्रकार

फ़ाइल .ti में {Key,ValueList} .ti शामिल हैं। यह फ़ंक्शन Data को Key जुड़े ValueList जोड़ता है। इस फ़ंक्शन के साथ लिखी गई सभी जानकारी प्रारूप हैंडलर को कॉल में शामिल है।

seq_trigger_ms () -> माचिस

seq_trigger_ms(all) बराबर।

seq_trigger_ms (झंडे) -> माचिस

प्रकार

एक मैच विनिर्देशन अनुक्रमिक अनुरेखण को चालू या बंद कर सकता है। यह फ़ंक्शन एक मिलान विनिर्देश देता है, जो निर्दिष्ट Flags साथ अनुक्रमिक अनुरेखण को चालू करता है।

यह मिलान विनिर्देश tp या tpl के अंतिम तर्क के रूप में निर्दिष्ट किया जा सकता है। तब सक्रिय Item अनुक्रमिक अनुरेखण के लिए एक ट्रिगर बन जाता है। इसका मतलब यह है कि यदि आइटम को ट्रेस फ्लैग call सेट के साथ एक प्रक्रिया पर कहा जाता है, तो प्रक्रिया टोकन seq_trace साथ "दूषित" है।

यदि Flags = all , सभी संभव झंडे सेट हैं।

SeqTraceFlag संभावित मूल्य SeqTraceFlag में उपलब्ध हैं।

match_spec() सिंटैक्स के विवरण के लिए, match_spec() में match_spec() सेक्शन Match Specifications in Erlang देखें, जो सामान्य मैच विनिर्देश "भाषा" की व्याख्या करता है।

ध्यान दें

अनुक्रमिक अनुरेखण के लिए सिस्टम ट्रैसर स्वचालित रूप से ttb द्वारा शुरू किया ttb जब ट्रेस ttb:tracer/0,1,2 साथ ट्रेस पोर्ट शुरू किया ttb:tracer/0,1,2

फ़ंक्शन seq_trigger_ms/0,1 का उपयोग कैसे करें का एक उदाहरण इस प्रकार है:

([email protected])5> ttb:tracer().
{ok,[[email protected]]}
([email protected])6> ttb:p(all,call).
{ok,{[all],[call]}}
([email protected])7> ttb:tp(mod,func,ttb:seq_trigger_ms()).
{ok,[{matched,1},{saved,1}]}
([email protected])8>

जब भी mod:func(...) इसके बाद कॉल किया जाता है, टोकन seq_trace को क्रियान्वित करने की प्रक्रिया पर सेट किया जाता है।

रुकें()

stop([]) बराबर stop([])

stop (Opts) -> रोका | {रुका, डार}

प्रकार

सभी नोड्स पर ट्रेसिंग स्टॉप। लॉग और ट्रेस सूचना फ़ाइलों को ट्रेस कंट्रोल नोड में भेजा जाता है और ttb_upload_FileName-Timestamp नामक निर्देशिका में संग्रहीत किया जाता है, जहां ttb_upload_FileName-Timestamp ट्रेस सेटअप के दौरान {file, File} साथ प्रदान किया जाता है और Timestamp फॉर्म yyyymmdd-hhmmss । यहां तक ​​कि एक ही मशीन पर नोड्स से लॉग भी ट्रेस कंट्रोल नोड इस निर्देशिका में ले जाया जाता है। इतिहास सूची को आगे के संदर्भ के लिए ttb_last_config नामक फ़ाइल में सहेजा जाता है (क्योंकि यह अब इतिहास और कॉन्फ़िगरेशन प्रबंधन फ़ंक्शन के माध्यम से सुलभ नहीं है, जैसे ttb:list_history/0 )।

विकल्प:

nofetch

ट्रेसिंग रोके जाने के बाद ट्रेस लॉग को एकत्रित करने के लिए एकत्र नहीं किया जाना चाहिए।

{fetch, Dir}

निर्देशिका के विनिर्देश को डेटा लाने के लिए अनुमति देता है। यदि निर्देशिका पहले से मौजूद है, तो एक त्रुटि डाली गई है।

format

ट्रेसिंग रोकने के बाद ट्रेस लॉग को फॉर्मेट करने का संकेत देता है। फ़ेच निर्देशिका में सभी लॉग मर्ज किए गए हैं।

return_fetch_dir

वापसी मूल्य को {stopped, Dir} होने का संकेत देता है {stopped, Dir} न कि केवल stopped । इसका तात्पर्य है fetch

get_et_handler ()

et हैंडलर लौटाता है, जिसका उपयोग format/2 या tracer/2 साथ किया जा सकता है।

उदाहरण: ttb:format(Dir, [{handler, ttb:get_et_handler()}])

प्रारूप (फाइल)

format(File,[]) समकक्ष format(File,[])

प्रारूप (फ़ाइल, विकल्प) -> ठीक | {त्रुटि, कारण}

प्रकार

यह एक बाइनरी लॉग का नाम हो सकता है, इस तरह के लॉग की एक सूची या एक या अधिक बाइनरी लॉग वाली निर्देशिका का नाम हो सकता है।

डेस्टिनेशन फाइल का फाइल डिस्क्रिप्टर Out । ट्रेस संदेश। विवरण के लिए, मॉड्यूल erlang लिए संदर्भ मैनुअल देखें। कुंजी flags , client और node । यदि handler को ट्रेसर फ़ंक्शन के विकल्प के रूप में निर्दिष्ट किया गया है, तो यह भी शामिल है। साथ ही, फंक्शन write_trace_info/2 साथ लिखी गई सभी जानकारी शामिल है।

निर्दिष्ट बाइनरी ट्रेस लॉग (ओं) को पढ़ता है। लॉग को उनके समय टिकटों के क्रम में संसाधित किया disable_sort है जब तक कि विकल्प disable_sort निर्दिष्ट नहीं disable_sort है।

यदि FormatHandler = {Function,InitialState} , Function प्रत्येक ट्रेस संदेश के लिए कहा जाता है।

यदि FormatHandler = get_et_handler() , et_viewer में अनुप्रयोग ET का उपयोग ट्रेस लॉग को आलेखीय रूप से प्रस्तुत करने के लिए किया जाता है। ttb कुछ अलग फिल्टर प्रदान करता है जो मेनू फिल्टर और et_viewer में स्केलिंग से चुना जा सकता है।

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

Function प्रत्येक कॉल से लौटा राज्य अगली कॉल पर जाता है, भले ही अगली कॉल किसी अन्य लॉग फ़ाइल से संदेश को प्रारूपित करने के लिए हो।

यदि Out निर्दिष्ट किया गया है, तो FormatHandler पहले पैरामीटर के रूप में फ़ाइल डिस्क्रिप्टर को Out रूप में प्राप्त करता है।

यदि et प्रारूप हैंडलर का उपयोग किया जाता है, तो इसे अनदेखा किया जाता है।

लपेट लॉग को एक या एक ही बार में सभी स्वरूपित किया जा सकता है। किसी सेट में रैप लॉग में से एक को फॉर्मेट करने के लिए, सटीक फ़ाइल नाम निर्दिष्ट करें। रैप लॉग्स के पूरे सेट को प्रारूपित करने के लिए, रैप काउंट के बजाय * साथ नाम निर्दिष्ट करें। उदाहरण के लिए, User's Guide