Debugging applications¶
Compile the package you need¶
Avoid running catkin build
without specifying a package since this builds the entire workspace which takes a long time.
You can specify individual packages simply by adding their names:
catkin build maplab
Build single packages efficiently¶
If you only changed a single package you can also restrict the build process to this single package:
catkin build maplab --no-deps
Even more efficient is invoking make -j8
in the build folder of the package
cd ~/maplab_ws/build/maplab && make -j8
Compile in Release mode¶
Most packages are not built in Release mode. To build packages in Release mode:
catkin build maplab --cmake-args -DCMAKE_BUILD_TYPE=Release
To set this as the default behavior in your current catkin profile:
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
Change individual packages to Debug mode¶
If you want to debug a program it makes sense to switch the package that the error is contained in to Debug
mode.
cd ~/catkin_ws/build/maplab
ccmake .
If ccmake
is not installed on your system, you have to install it using:
sudo apt-get install cmake-curses-gui
If ccmake
is there, you will now see a window similar to this:
BUILD_SHARED_LIBS ON
CATKIN_DEVEL_PREFIX /Users/slynen/catkin_ws/devel
CATKIN_ENABLE_TESTING ON
CATKIN_PACKAGE_PREFIX
CATKIN_SKIP_TESTING OFF
CMAKE_BUILD_TYPE Release
CMAKE_INSTALL_PREFIX /Users/slynen/catkin_ws/install
...
Navigate to the line which says CMAKE_BUILD_TYPE
using the cursor keys and press Enter
. Now replace Debug
with Release
. Press c
to configure, followed by g
to generate. (you might now press e
to hide warnings.). Finally press q
to quit.
Now make the package by invoking:
cd ~/maplab_ws/build/maplab && make -j8
HINT: Don’t forget to switch back to Release
once you are done with debugging.
Run gdb with arguments¶
In order to run a process with arguments in gdb, the most efficient way is to use:
gdb --ex run --args ~/devel/lib/maplab/maplab --use_external_memory=false
Where --use_external_memory=false
is just an example flag.