在Visual Studio Code中调试ROS程序
安装插件
在Visual Studio Code中安装ROS插件。
编译程序
编译程序时,在catkin_make命令后加上-DCMAKE_BUILD_TYPE=Debug选项:
catkin_make -DCMAKE_BUILD_TYPE=Debug
或在CMakeLists.txt文件中加入:
set(CMAKE_BUILD_TYPE "Debug")
调试运行配置
在运行和调试中点击创建launch.json文件,并在launch.json文件右下角点击添加配置,在弹出菜单中选择ROS:Attach。当调试单独一个程序时通过上述方式,当调试由launch文件启动的多个程序时,则选择ROS:Launch。
添加配置后的launch.json文件如下:
运行并调试
在程序中设置断点,并在roscore启动的情况下,运行程序:
点击界面左上角绿色三角开始调试:
选择C++:
选择已经启动的程序——talker:
若弹出下列提示,则键入y:
注意,通过Visual Studio Code进行远程调试时,键入y可能不生效,此时需要在运行程序的系统中新建/usr/share/polkit-1/actions/com.ubuntu.pkexec.gdb.policy文件并写入下列内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> <policyconfig> <action id="com.ubuntu.pkexec.gdb-settings"> <icon_name>gdb-settings</icon_name> <defaults> <allow_any>yes</allow_any> <allow_inactive>yes</allow_inactive> <allow_active>yes</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gdb</annotate> <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> </action> </policyconfig>
如图所示:
此时调试启动,出现调试控制按钮。需要注意的是,或许因为程序先启动后开启调试,所以在非ROS周期执行循环中设置的断点似乎无法生效;而在ROS周期执行的循环中设置的断点,程序可暂停在此处。
一些问题
当ROS程序以管理员权限运行时,则调试时无法捕捉到该程序,会有如下报错: