How to debug Erlang code?

Viewed 16097

I have some Ruby and Java background and I'm accustomed to having exact numbers of lines in the error logs.

So, if there is an error in the compiled code, I will see the number of line which caused the exception in the console output.

Like in this Ruby example:

my_ruby_code.rb:13:in `/': divided by 0 (ZeroDivisionError)
    from my_ruby_code.rb:13

It's simple and fast - I just go to the line number 13 and fix the error.

On the contrary, Erlang just says something like:

** exception error: no match of right hand side value [xxxx]
 in function my_module:my_fun/1
 in call from my_module:other_fun/2

There are no line numbers to look at.

And if I have two lines like

X = Param1,
Y = Param2,

in 'my_fun', how can understand in which line the problem lies?

Additionally, I have tried to switch to Emacs+Elang-mode from Vim, but the only bonus I've got so far is the ability to cycle through compilation errors inside Emacs (C-k `).

So, the process of writing code and seeking for simple logical errors like 'no match of right hand side' seems to be a bit cumbersome.

I have tried to add a lot of "io:format" lines in the code, but it is additional work which takes time.

I have also tried to use distel, but it requires 10 steps to just open a debugger once.

Questions:

  1. What is the most straight and simple way to debug Erlang code?
  2. Does Emacs' erlang-mode has something superior in terms of Erlang development comparing to Vim?
  3. What development 'write-compile-debug' cycle do you prefer? Do you leave Emacs to compile and run the code in the terminal? How do you search for errors in your Erlang code?
4 Answers

You can use "debug_info" at compile time of the file and "debugger"

1> c(test_module, [debug_info]).
{ok, test_module}
2> debugger:start().

More details about how do Debugging in Erlang you can follow by link to video - https://vimeo.com/32724400

Related