Debugging With Vim Go
Although learning VIM can be quite painful, I learned it and now I love it so much I can’t write or code without it. Unfortunately, VIM is not super intuitive and is not as user friendly as modern IDEs. Some functionalities are not easy to use and / or easy to find. For example, debugging programs using VIM is not as trivial as clicking on a button like most IDEs.
In this post, I will show some basic commands to use to debug a Go program with vim-go.
Start the debugger by using
:GoDebugStart in your
main function. Your VIM
should display the following:
Your buffer will be split with new windows:
- output of stdout/stderr
Those windows display interesting information, but for my daily usage, I don’t need to have all
those windows. I just keep the variable and stacktrace windows. To do so, I edited my
to include the following:
If you want to start with argument or some flag, you can do it by calling
:GoDebugStart . -someflag value. In my example, I execute with
:GoDebugStart . -name Louis
Then, place your cursor under the line you want to break and call
:GoDebugNext. This will add a
breakpoint, run your program and halt on the breakpoint:
You can see the values of the local variables as well as the function argument’s values.
You can also print in the stdout with
:GoDebugPrint variable if the variable is not displayed in
the variable window (e.g. the value of a pointer, one element in a slice, …):
You can navigate and put a breakpoint anywhere you want. For example, I call
When you have finished, you can call
:GoDebugStop to stop the debugging.
A GIF to show the entire debugging of a simple Go program:
If you want to go further, you can check the documentation in VIM with
:h vim-go or directly