Written by Anders WEI, 31 May 2011
As we know, Erlang/OTP is a highly concurrent programming language, which means there could be thousands of processes existing simultaneously in one running Erlang/OTP system. In a traditional C++ development procedure, we may spend 20% of effort on the programming logic and 80% on error handling. But this is really different for an Erlang/OTP application design, which may cost 80% of effort on the logic(e.g. ensure the legacy behaviours are not impacted), but for the error handling "just let the process crash if errors occurred" sometimes will be the "rule of thumb".
There are various reasons for crash, "the process receieved an unexpected message" for instance, and even worse, in most pratical cases the entire system is too complex to find out which process (it might be a temporary process which has been destroyed) sent out these "bad" messages. For the programmers' point of view, it can be a nightmare to find the bugs.
dbg:tracer is a very useful built-in block which gives us some methods for trancing the processes. We even wrote a tool to parse the trace log, Example. But things become out-of-control if there were large number of processes. Actually we notice that debuging on only 6 processes of codes is hard enough to find where the unexpected messages come from.
The purpose of this project is going to provide a GUI-based debug tool, and it should include the following exciting features.
1. Draw the process tree as a chart, including temporary help processes. This could be an example picture of this feature
The X-axis is time, where the Y-axis is process. In this GUI, we should be able to check process A created process B at time x1, and process B spwaned process C at time x2, and also we are able to see when each process terminates/crashes.
If we click on a process, we should be able to check the initial startup arguments
In addition, we are able to see the message-flows during this time period. If we clicked on a message, we should be able to find out the detailed message content, and the processes involved in sending/receiving messages.
2. Draw code-level call traces Example for a process , also it should be possible to click on a point for example when it receives a message and then follow the code-level traces.
To be added.
Owner currently owned by Anders Wei & Simon Huang.
If you are interested, please join us :)