ROS::多种方式的GDB调试
参考连接:wiki.ros.org/roslaunch/Tutorials/Roslaunch Nodes in Valgrind or GDB
方式1:xterm
工具:GDB,xterm
不可用ssh登录到机器人调试机器人。
本机调试:该方式需要电脑有显示器。
- 安装GDB和xteram
sudo apt-get install xterm
sudo apt-get install gdb
- 修改节点启动launch文件
例如:
<node pkg="pkg" type="pkg" respawn="false" name="name" output="screen" launch-prefix="xterm -e gdb --args"/>
然后在启动该节点,会出现下面窗口:
在窗口中输入run并回车,节点开始执行,当出现执行问题时输入bt即可查看执行堆栈中的内容,可能看到出错的地方在哪里。
方式2:直接在终端中运行
工具:GDB
该方式可以ssh登录到机器人调试。
- 安装GDB
sudo apt-get install gdb
- 修改节点启动launch文件
例如:
<node pkg="pkg" type="pkg" respawn="false" name="name" output="screen" launch-prefix="gdb -ex run --args"/>
然后在启动该节点,程序就在终端窗口中运行,执行时出现问题直接在终端中输入bt既可查看堆栈。
方式2:后台启动
工具:GDB,screen
该方式可以ssh登录到机器人调试.
可以后台执行不用一直监测着执行过程.
也可以随时查看节点执行的状态,比如std::cout、ROS_INFO、ROS_ERROR等输出的信息.
也可以将终端输出的信息保存为文件。
- 安装GDB
sudo apt-get install gdb
- 安装screen
sudo apt-get install screen
-
有关screen的用法可以自行查一下,不再介绍。
-
修改节点启动launch文件
-
例1:
<node pkg="pkg_name" type="name" respawn="false" name="name" output="screen" launch-prefix="screen -m -d gdb -ex run --args"/>
开启一个终端后输入 screen -ls
可以看到
节点出现错误时可以执行screen -r 20801
就可以GDB调试了,更多操作请看screen相关介绍。
- 例2
<node pkg="pkg_name" type="name" respawn="false" name="name" output="screen" launch-prefix="screen -m -S navi -d gdb -ex run --args"/>
设置screen 名字为navi,节点出现错误时可以执行screen -r navi
就可以GDB调试了,更多操作请看screen相关介绍。
- 例3
<node pkg="pkg_name" type="name" respawn="false" name="name" output="screen" launch-prefix="screen -m -L -Logfile /home/lhh/navi.log -S navi -d gdb -ex run --args"/>
设置screen 名字为navi且终端信息保存到/home/lhh/navi.log文件中,节点出现错误时可以执行screen -r navi
就可以GDB调试了,更多操作请看screen相关介绍。
- 命令行输入screen -d 暂时断开(detach)screen会话
- screen会话中先按下Ctrl+a,然后再按d字母键,暂时分离该会话