zoukankan      html  css  js  c++  java
  • [Erlang03]Erlang有哪些好用的静态分析工具?

    1. dialyzer

      Dialyzer starts its analysis from either debug-compiled BEAM bytecode or from Erlang source code.

      Dialyzer 可以分析*.erl和有debug-info的BEAM, Dialyzer提供GUICommand Line两种模式,推荐使用command line模式.

      使用步骤:

       1.1 设置PLT(Persitent Lookup Table),用于存放分析结果,推荐建立PLT加入OTP Applications 和你经常使用的Applications时

       最少的PLT路径应该是这样的:

    dialyzer --build_plt -r $ERL_TOP/lib/stdlib/ebin
                                $ERL_TOP/lib/kernel/ebin 
                                $ERL_TOP/lib/mnesia/ebin

       Dialyzer 会把PLT放在一个$DIALYZER_PLT目录下,如果找不到,就会入在$HOME/.dialyzer_plt 这个路径也可以用—plt 或—output_plt 选项设置。

      1.2 分析命令:

    %% 可以分析单个文件,目录下文件,或一个Applications
    >dialyzer test.erl
    >dialyzer  -r Dir
    >dialyzer -apps Applications

    1.3 为什么会需要这个工具?

       Erlang不是一个强类型语言,所以基本上编译时不会像c++那样去严格检查函数的输入输出类型啊,这带来的好处就是:

    foo(X) when is_integer(X) -> X + 1.
    foo(X) -> list_to_atom(X).

    以上这个例子在其它强类型语言也可以实现,但是总是要自己去骗下编译器,说这个能过什么的!!!但是erlang这样写函数是很正常的行为,这也是动态编译带来的好处之一,

    通常的analyzers会尽量保证在运行期间也不会出错,如果Erlang也这样做,就会change it semantics.  两都不可兼得啊!

    于是,就有了团队开发了dialyzer,于是世界和平啦…….

    2 coverage

        Todo.悲伤

  • 相关阅读:
    NYOJ 625 笨蛋的难题(二)
    NYOJ 102 次方求模
    ZJU Least Common Multiple
    ZJUOJ 1073 Round and Round We Go
    NYOJ 709 异形卵
    HDU 1279 验证角谷猜想
    BNUOJ 1015 信息战(一)——加密程序
    HDU 1202 The calculation of GPA
    "蓝桥杯“基础练习:字母图形
    "蓝桥杯“基础练习:数列特征
  • 原文地址:https://www.cnblogs.com/zhongwencool/p/3719388.html
Copyright © 2011-2022 走看看