Gazebo will segfault if any of the components (mechanism controller stack, dynamic plug-ins, etc) fail. To make PR2 simulator a useful tool, you will want to run it in debug mode sometimes. Assuming user is familiar with gdb, here are multiple ways to obtain a backtrace.

Launching GDB with roslaunch

Add launch-prefix="$(find gazebo_worlds)/scripts/gdbrun" to the gazebo node in the launch script. For reference, take a look at debug.launch.

Attach GDB to a Running Process

  • Bring up Gazebo normally, find the process id for gazebo, e.g.

$ ps -ef | grep 'gazebo/bin/gazebo'
user       1234  2345 12 12:00 ?        00:00:01 /home/user/projects/electric_release/simulator_gazebo/gazebo/bin/gazebo -s -1 -u /home/user/projects/electric_release/simulator_gazebo/gazebo_worlds/worlds/empty.world __name:=gazebo __log:=/home/user/.ros/electric_release/log/012304e0-c778-11e0-ae1a-f46d1234a4c9/gazebo-2.log

Next, attach gdb to the gazebo process. For example, given the above result from ps,

localhost:~/ros/ros-pkg> gdb --pid 1234

When gdb stops loading, type cont at the gdb prompt to continue,

(gdb) cont

When gazebo segfaults, you can return to the gdb prompt and use your favorite gdb commands to debug.


Wiki: pr2_simulator/Tutorials/RunningSimulatorWithGDB/diamondback (last edited 2016-02-23 05:44:40 by AustinHendrix)