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.悲伤

  • 相关阅读:
    vue-cli3配置开发环境和生产环境
    vue配置开发环境和生产环境
    js实现div拖拽互换位置效果
    axios用post提交的数据格式
    面试题会被问及哪些?(总结)
    深入理解vue
    nodejs 前端项目编译时内存溢出问题的原因及解决方案
    MUI框架开发HTML5手机APP(一)--搭建第一个手机APP
    关于if省略{}时的一些问题
    函数声明的两种形式的区别
  • 原文地址:https://www.cnblogs.com/zhongwencool/p/3719388.html
Copyright © 2011-2022 走看看