Erlang 21

dialyzer




erlang

dialyzer

मॉड्यूल

अपोहक

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

डायलर, एरलांग कार्यक्रमों के लिए एक DIscrepancy AnaLYZer।

विवरण

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

Dialyzer अपना विश्लेषण डीबग-संकलित BEAM बायटेकोड या Erlang सोर्स कोड से शुरू करता है। विसंगति की फाइल और लाइन नंबर के साथ-साथ यह भी बताया जाता है कि विसंगति क्या है। Dialyzer सफलता के टाइपिंग की अवधारणा पर अपने विश्लेषण को आधार बनाता है, जो ध्वनि चेतावनी (कोई झूठी सकारात्मक) की अनुमति नहीं देता है।

कमांड लाइन से डायलाइज़र का उपयोग करना

Dialyzer में स्वचालित उपयोग के लिए कमांड-लाइन संस्करण है। यह खंड विकल्पों का एक संक्षिप्त विवरण प्रदान करता है। निम्नलिखित जानकारी शेल में निम्नलिखित लिखकर प्राप्त की जा सकती है:

dialyzer --help

Dialyzer के संचालन के बारे में अधिक जानकारी के लिए, उपयोगकर्ता के गाइड में Using Dialyzer from the GUI अनुभाग देखें।

कमांड-लाइन संस्करण की स्थिति से बाहर निकलें:

0

विश्लेषण के दौरान कोई समस्या नहीं पाई गई और कोई चेतावनी नहीं दी गई।

1

विश्लेषण के दौरान समस्याएं पाई गईं।

2

विश्लेषण के दौरान कोई समस्या नहीं पाई गई, लेकिन चेतावनी का उत्सर्जन किया गया।

उपयोग:

dialyzer [--add_to_plt] [--apps applications] [--build_plt]
         [--check_plt] [-Ddefine]* [-Dname] [--dump_callgraph file]
         [files_or_dirs] [--fullpath] [--get_warnings] [--gui] [--help]
         [-I include_dir]* [--no_check_plt] [--no_native]
         [--no_native_cache] [-o outfile] [--output_plt file] [-pa dir]*
         [--plt plt] [--plt_info] [--plts plt*] [--quiet] [-r dirs]
         [--raw] [--remove_from_plt] [--shell] [--src] [--statistics]
         [--verbose] [--version] [-Wwarn]*
ध्यान दें

* बताता है कि विकल्प की कई घटनाएं संभव हैं।

विकल्प:

--add_to_plt

PLT को -c और -r साथ निर्दिष्ट फ़ाइलों को शामिल करने के लिए बढ़ाया जाता है। यह निर्दिष्ट करने के लिए कि किस PLT को शुरू करना है, और - --plt यह बताने के लिए --plt का उपयोग करें। ध्यान दें कि विश्लेषण में संभवतः पीएलटी से फाइलें शामिल हो सकती हैं यदि वे नई फाइलों पर निर्भर करते हैं। यह विकल्प केवल BEAM फ़ाइलों के लिए काम करता है।

--apps applications

इस विकल्प का उपयोग आम तौर पर पीएलटी के निर्माण या संशोधन के रूप में किया जाता है:

dialyzer --build_plt --apps erts kernel stdlib mnesia ...

Erlang / OTP स्थापना के अनुरूप लाइब्रेरी अनुप्रयोगों को आसानी से संदर्भित करने के लिए। हालाँकि, यह विकल्प सामान्य है और इसका उपयोग विश्लेषण के दौरान Erlang / OTP अनुप्रयोगों को संदर्भित करने के लिए भी किया जा सकता है। फ़ाइल या निर्देशिका नाम भी शामिल किए जा सकते हैं, जैसे:

dialyzer --apps inets ssl ./ebin ../other_lib/ebin/my_module.beam
--build_plt

विश्लेषण एक खाली पीएलटी से शुरू होता है और -c और -r साथ निर्दिष्ट फ़ाइलों से एक नया बनाता है। यह विकल्प केवल BEAM फ़ाइलों के लिए काम करता है। डिफ़ॉल्ट --plt स्थान को ओवरराइड करने के लिए, --plt या --output_plt उपयोग करें।

--check_plt

स्थिरता के लिए पीएलटी की जांच करें और यदि यह अप-टू-डेट नहीं है तो इसे फिर से बनाएं।

-Dname (या -Dname=value )

स्रोत से विश्लेषण करते समय, डायलियर को परिभाषित करें। (**)

--dump_callgraph file

निर्दिष्ट फ़ाइल में कॉल ग्राफ़ को डंप करें जिसका प्रारूप फ़ाइल नाम एक्सटेंशन द्वारा निर्धारित किया गया है। समर्थित एक्सटेंशन हैं: raw , dot और ps । यदि फ़ाइल एक्सटेंशन के रूप में कुछ और उपयोग किया जाता है, तो डिफ़ॉल्ट प्रारूप .raw का उपयोग किया जाता है।

files_or_dirs (पिछड़ी संगतता के लिए भी -c files_or_dirs )

विश्लेषण के प्रकार के आधार पर निर्दिष्ट फ़ाइलों या निर्देशिकाओं में .erl या .beam फ़ाइलों के दोषों का पता लगाने के लिए कमांड लाइन से .beam का उपयोग करें।

--fullpath

उन फ़ाइलों के पूर्ण पथ नाम प्रदर्शित करें, जिनके लिए चेतावनी उत्सर्जित की जाती है।

--get_warnings

PLT में फेरबदल करते हुए भी Dialyzer उत्सर्जन चेतावनी दें। चेतावनी केवल उन फ़ाइलों के लिए उत्सर्जित होती है जिनका विश्लेषण किया जाता है।

--gui

GUI का उपयोग करें।

--help (या -h )

इस संदेश को प्रिंट करें और बाहर निकलें।

-I include_dir

स्रोत से विश्लेषण करते समय, शामिल include_dir से include_dir को भेजें। (**)

--no_check_plt

Dialyzer चलाते समय PLT चेक को छोड़ दें। यह स्थापित पीएलटी के साथ काम करते समय उपयोगी होता है जो कभी नहीं बदलता है।

--no_native (या -nn )

कुछ प्रमुख फ़ाइलों के मूल कोड संकलन को बायपास करें जो कई फ़ाइलों को डायल करते समय डायलाइज़र स्वाभाविक रूप से प्रदर्शन करता है। यह संकलन समय से बचता है, लेकिन परिणाम (बहुत) लंबे विश्लेषण समय में परिणाम कर सकता है।

--no_native_cache

डिफ़ॉल्ट रूप से, $XDG_CACHE_HOME/erlang/dialyzer_hipe_cache निर्देशिका में मूल संकलन के परिणामों को कैश करता है। XDG_CACHE_HOME $HOME/.cache XDG_CACHE_HOME चूक $HOME/.cache । कैशिंग अक्षम करने के लिए इस विकल्प का उपयोग करें।

-o outfile (या - --output outfile )

कमांड लाइन से डायलाइज़र का उपयोग करते समय, विश्लेषण परिणामों को स्टैडआउट के बजाय निर्दिष्ट आउटफाइल पर भेजें।

--output_plt file

इसे बनाने के बाद निर्दिष्ट फ़ाइल पर PLT स्टोर करें।

-pa dir

Erlang के लिए मार्ग में dir शामिल करें। जब -include_lib() निर्देशों का विश्लेषण करते हैं तो यह उपयोगी होता है।

--plt plt

प्रारंभिक PLT के रूप में निर्दिष्ट PLT का उपयोग करें। यदि PLT को सेटअप के दौरान बनाया गया था, तो फ़ाइलों की संगति के लिए जाँच की जाती है।

--plt_info

डायलटीज़र को PLT के बारे में जानकारी प्रिंट करें और फिर छोड़ दें। PLT को --plt(s) साथ निर्दिष्ट किया जा सकता है।

--plts plt*

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

dialyzer --build_plt --output_plt plt_1 files_to_include
...
dialyzer --build_plt --output_plt plt_n files_to_include

फिर उन्हें निम्नलिखित में से किसी एक तरीके से इस्तेमाल किया जा सकता है:

dialyzer files_to_analyze --plts plt_1 ... plt_n

या

dialyzer --plts plt_1 ... plt_n -- files_to_analyze

नोटिस -- दूसरे मामले में परिसीमन।

--quiet (या -q )

डायलाइज़र को थोड़ा और शांत करें।

-r dirs

files_or_dirs रूप में समान है, लेकिन निर्दिष्ट निर्देशिका विश्लेषण के प्रकार के आधार पर, .erl और .beam फ़ाइलों वाली उपनिर्देशिकाओं के लिए पुनरावर्ती खोज की जाती हैं।

--raw

कमांड लाइन से डायलाइज़र का उपयोग करते समय, फॉर्मेट किए गए परिणाम के बजाय कच्चे विश्लेषण परिणाम (एरलंग शब्द) का उत्पादन करें। कच्चा प्रारूप पोस्ट-प्रोसेस (उदाहरण के लिए, चेतावनी को फ़िल्टर करने या HTML पृष्ठों को आउटपुट करने) के लिए आसान है।

--remove_from_plt

-c और -r साथ निर्दिष्ट फाइलों की जानकारी को PLT से हटा दिया जाता है। ध्यान दें कि यह शेष आश्रित फ़ाइलों के एक reanalysis का कारण बन सकता है।

--shell

GUI चलाते समय Erlang शेल को अक्षम न करें।

--src

डिफ़ॉल्ट को ओवरराइड करें, जो BEAM फ़ाइलों का विश्लेषण करना है, और इसके बजाय Erlang स्रोत कोड से शुरू करने का विश्लेषण करना है।

--statistics

निष्पादन की प्रगति के बारे में जानकारी प्रिंट करें (विश्लेषण चरण, प्रत्येक में खर्च किए गए समय और सापेक्ष इनपुट का आकार)।

--verbose

डायलाइज़र को थोड़ा और वर्बोज़ बनाएं।

--version (या -v )

डायलाइज़र संस्करण प्रिंट करें और कुछ और जानकारी और बाहर निकलें।

-Wwarn

विकल्पों का एक परिवार जो चुनिंदा चेतावनियों को चालू / बंद करता है। (चेतावनियों के नाम पर मदद के लिए, dialyzer -Whelp का dialyzer -Whelp ।) ध्यान दें कि विकल्प को फ़ाइल में -dialyzer() विशेषता के साथ भी निर्दिष्ट किया जा सकता है। विवरण के लिए, Requesting or Suppressing Warnings in Source Files अनुभाग देखें।

ध्यान दें

** विकल्प -D और -I कमांड लाइन से और डायलेजर जीयूआई दोनों में काम करता हूं; परिभाषित और शामिल का सिंटैक्स वही है जो erlc(1) द्वारा उपयोग किया जाता है।

चेतावनी के विकल्प:

-Werror_handling (***)

उन कार्यों के लिए चेतावनी शामिल करें जो केवल एक अपवाद द्वारा वापस आते हैं।

-Wno_behaviours

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

-Wno_contracts

अवैध अनुबंधों के बारे में चेतावनी को दबाएं।

-Wno_fail_call

असफल कॉल के लिए चेतावनी को दबाएं।

-Wno_fun_app

मजेदार अनुप्रयोगों के लिए चेतावनी को दबाएं जो विफल हो जाएंगे।

-Wno_improper_lists

अनुचित सूचियों के निर्माण के लिए चेतावनी को दबाएं।

-Wno_match

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

-Wno_missing_calls

लापता कार्यों के लिए कॉल के बारे में चेतावनी दबाएं।

-Wno_opaque

डेटा प्रकारों की अस्पष्टता के उल्लंघन के लिए चेतावनी को दबाएं।

-Wno_return

उन कार्यों के लिए चेतावनी को दबाएं जो कभी भी मूल्य नहीं लौटाएंगे।

-Wno_undefined_callbacks

उन व्यवहारों के बारे में चेतावनी को -callback जिनके पास कॉलबैक के लिए कोई-कॉलबैक विशेषताएँ नहीं हैं।

-Wno_unused

अप्रयुक्त कार्यों के लिए चेतावनी को दबाएं।

-Wrace_conditions (***)

दौड़ की संभावित स्थितियों के लिए चेतावनी शामिल करें। ध्यान दें कि डेटा दौड़ को खोजने वाला विश्लेषण इंट्रा-प्रक्रियात्मक डेटा प्रवाह विश्लेषण करता है और कभी-कभी समय में विस्फोट हो सकता है। इसे अपने जोखिम पर सक्षम करें।

-Wunderspecs (***)

अंडरस्क्राइब किए गए फ़ंक्शंस के बारे में चेतावनी (विनिर्देशन सख्ती से सफलता टाइपिंग की अनुमति है)।

-Wunknown (***)

अज्ञात कार्यों के बारे में चेतावनियों और प्रकारों को कमांड-लाइन संस्करण की निकास स्थिति को प्रभावित करते हैं। डिफ़ॉल्ट स्थिति से बाहर निकलने की स्थिति निर्धारित करते समय अज्ञात कार्यों और प्रकारों के बारे में चेतावनी को अनदेखा करना है। एरलैंग से डायलाइज़र का उपयोग करते समय, अज्ञात कार्यों और प्रकारों के बारे में चेतावनी लौटा दी जाती है; डिफ़ॉल्ट को इन चेतावनियों को वापस नहीं करना है।

-Wunmatched_returns (***)

फ़ंक्शन कॉल के लिए चेतावनी शामिल करें जो एक संरचित रिटर्न मान को अनदेखा करते हैं या कई संभावित रिटर्न वैल्यू में से एक के खिलाफ मेल नहीं खाते हैं।

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

-Woverspecs (***)

ओवरस्पीड फ़ंक्शंस के बारे में चेतावनी दें (विनिर्देश टाइपिंग की सफलता की तुलना में कड़ाई से कम अनुमति है)।

-Wspecdiffs (***)

चेतावनी जब टाइपिंग सफलता टाइपिंग से अलग है।

ध्यान दें

*** उन विकल्पों को दर्शाता है जो चेतावनी को बंद करने के बजाय चालू करते हैं।

एर्लांग से डायलाइज़र का उपयोग करना

डायलाइजर का उपयोग सीधे एरलंग से किया जा सकता है। GUI और कमांड लाइन संस्करण दोनों भी उपलब्ध हैं। विकल्प कमांड लाइन से दिए गए विकल्पों के समान हैं, कमांड लाइन Using Dialyzer from the Command Line अनुभाग देखें।

स्रोत फ़ाइलों में चेतावनी का अनुरोध या दमन

विशेषता -dialyzer() का उपयोग फ़ंक्शन या चेतावनी विकल्पों को निर्दिष्ट करके मॉड्यूल में चेतावनी को बंद करने के लिए किया जा सकता है। उदाहरण के लिए, फ़ंक्शन f/0 लिए सभी चेतावनियों को बंद करने के लिए, निम्नलिखित पंक्ति शामिल करें:

-dialyzer({nowarn_function, f/0}).

अनुचित सूचियों के लिए चेतावनी को बंद करने के लिए, स्रोत फ़ाइल में निम्न पंक्ति जोड़ें:

-dialyzer(no_improper_lists).

फ़ंक्शन की घोषणा के बाद विशेषता -dialyzer() की अनुमति है। चेतावनी विकल्पों या कार्यों की सूची की अनुमति है:

-dialyzer([{nowarn_function, [f/0]}, no_improper_lists]).

चेतावनी विकल्प कार्यों के लिए प्रतिबंधित किया जा सकता है:

-dialyzer({no_improper_lists, g/0}).
-dialyzer({[no_return, no_match], [g/0, h/0]}).

चेतावनी विकल्पों पर मदद के लिए, dialyzer -Whelp उपयोग करें। विकल्प भी गणना किए गए हैं, नीचे फ़ंक्शन gui/1 देखें ( WarnOpts )।

ध्यान दें

स्रोत फ़ाइल में सेट होने पर चेतावनी विकल्प -Wrace_conditions का कोई प्रभाव नहीं होता है।

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

-dialyzer(unmatched_returns).

निर्यात

format_warning (Msg) -> स्ट्रिंग ()

प्रकार

देखें run/1

चेतावनी से एक स्ट्रिंग प्राप्त करें जैसा कि run/1 द्वारा लौटाया गया है।

gui () -> ठीक है | {त्रुटि, Msg}
gui (ऑप्टलिस्ट) -> ठीक | {त्रुटि, Msg}

प्रकार

निचे देखो।

डायलाइज़र GUI संस्करण।

OptList  :: [Option]
Option   :: {files,          [Filename :: string()]}
          | {files_rec,      [DirName :: string()]}
          | {defines,        [{Macro :: atom(), Value :: term()}]}
          | {from,           src_code | byte_code}
                               %% Defaults to byte_code
          | {init_plt,       FileName :: string()}
                               %% If changed from default
          | {plts,           [FileName :: string()]}
                               %% If changed from default
          | {include_dirs,   [DirName :: string()]}
          | {output_file,    FileName :: string()}
          | {output_plt,     FileName :: string()}
          | {check_plt,      boolean()},
          | {analysis_type,  'succ_typings' |
                             'plt_add' |
                             'plt_build' |
                             'plt_check' |
                             'plt_remove'}
          | {warnings,       [WarnOpts]}
          | {get_warnings,   bool()}

WarnOpts :: error_handling
          | no_behaviours
          | no_contracts
          | no_fail_call
          | no_fun_app
          | no_improper_lists
          | no_match
	  | no_missing_calls
          | no_opaque
	  | no_return
          | no_undefined_callbacks
          | no_unused
          | race_conditions
          | underspecs
          | unknown
          | unmatched_returns
          | overspecs
          | specdiffs
plt_info (string ()) -> {'ok', [{atom (), any ()}} | {'त्रुटि', परमाणु ()}

निर्दिष्ट PLT के बारे में जानकारी देता है।

रन (ऑप्टलिस्ट) -> चेतावनी

प्रकार

gui/0,1 देखें।

निचे देखो।

डायलाइज़र कमांड-लाइन संस्करण।

Warnings :: [{Tag, Id, Msg}]
Tag      :: 'warn_behaviour'
          | 'warn_bin_construction'
          | 'warn_callgraph'
          | 'warn_contract_not_equal'
          | 'warn_contract_range'
          | 'warn_contract_subtype'
          | 'warn_contract_supertype'
          | 'warn_contract_syntax'
          | 'warn_contract_types'
          | 'warn_failing_call'
          | 'warn_fun_app'
          | 'warn_matching'
          | 'warn_non_proper_list'
          | 'warn_not_called'
          | 'warn_opaque'
          | 'warn_race_condition'
          | 'warn_return_no_exit'
          | 'warn_return_only_exit'
          | 'warn_umatched_return'
          | 'warn_undefined_callbacks'
          | 'warn_unknown'
Id  = {File :: string(), Line :: integer()}
Msg = msg() -- Undefined