ROS nodes can be debugged in a similar way to conventional programs since they run as a process with the associated pid in the Linux runtime environment. Therefore, we can debug them using standard tools, such as gdb, check for memory leaks with memcheck, and profile for performance using valgrind or both.
In the following sections, we will learn how to configure these tools in the ROS framework. Next, we will look into how to add logging messages to the source code of programs in order to make them observable so that we can diagnose basic problems in runtime without the need to debug the executable binaries. Later, we will discuss ROS introspection tools, which help in easily detecting broken connections between nodes.