Skip to content

danabr/visualize.erl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Some tools for visualizing Erlang.

Note, if your are looking for real static analysis tools, have a look at
RefactorErl.

The first tool is a dependency calculator. It calculates dependencies
between erlang modules (either within an app, or between apps).

The second tool consists of a parse transform and an analysis process,
that can be used to visualize how processes communicate with each other.

Both tools generate data that can fed to graphviz to product digraphs.

The dependency visualizer
-------------------------
Usage:
    1> Deps = gather:dependencies("/path/to/app", internal),
    2> Dot = visualize:digraph(Deps),
    3> file:write_file("test.dot", Dot).

Note that the application must have been compiled with the debug_info flag,
or otherwise no dependencies can be extracted. The OTP library on some
systems happens to compiled in such a way, so you can visualize OTP!

Limitations:
The tool only looks for direct calls to modules, e.g. lists:reverse([1,2]).
Any call where the module is not an atom can not be properly recorded. Such
calls are listed with the module 'UNKNOWN'. Also, the tool does not consider
uses of apply.

To summarize, these calls will not be noted by the tool:
    apply(lists, reverse, [[1,2,3]])
    M = lists, M:reverse([1,2,3])

The process analysis tool
-------------------------
The process analysis tool records interactions between processes. In fact,
it records:
*  ! (The bang operator)
*  spawn
*  spawn_link
*  register
*  gen_server:call (To be done!)
*  gen_server:cast (To be done!)
*  gen_server:reply (To be done!)
*  gen_server:start (To be done!)
*  gen_server:start_link (To be done!)

(One could wonder why I went through all this trouble, given there is trace
 functionality built right into OTP, but what other excuse could I find to
 create a parse transform?)

To use it, you have to include "include/analyze.hrl" in all files that take
part in the interactions you would like to analyze. Then you do like this:
    1> process_analyzer:start().
    2> my_code:run().
    3> Flow = process_analyser:flow(),
    4> Dot = visualize:digraph(Deps),
    5> file:write_file("test.dot", Dot).

About

Some tools for visualizing Erlang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages