Post - Termdebug and ROS
Today I was trying to use vim’s termdebug1 feature for some development w/ ROS. Getting this to work properly in vim isn’t as straight forward as I would like (mostly because ROS is a tad infectious). If you run vim in a ROS workspace, you’ll quickly notice that you can’t run
:!rosrun my_pkg my_executable
This is because your workspace is not sourced properly. All subshells will have the same environment as vim, so you can do something like
:!source devel/setup.bash && rosrun my_pkg my_executable --flags
But that affects only the subshell it was run in. The easiest way to avoid this is to run the source command before you launch vim.
ROS recommends2 running gdb by doing something like
rosrun --prefix gdb my_pkg my_executable (gdb) r --flags
This does not play well with vim’s termdebug. I understand how this
rosrun command is “convenient” but it leads to the infantilization of developers since many times we don’t even think about where our built executables end up. Anyway, the quickest way to find the executable is
find . -name "my_executable"
The executable should be found in
./build/my_pkg/devel/lib/my_pkg. From within vim you can load3 this with
:packadd termdebug :Termdebug ./build/my_pkg/devel/lib/my_pkg
Now you should be able to run term debug commands from within vim and all appropriate shared libraries should load correctly.
(Don’t forget to build in debug mode so all the debug symbols are there)
You can also load this with↩︎
filewithin the gdb window.