示教器插件调试方案
在aubo_caps
开发过程中,在aubo_scope
示教器中调试正在开发的插件是一个非常重要并且频繁的工作。本教程是基于qtcreator
和gdb
命令行的调试方案,开发者可以根据自己的使用习惯,选择适合自己的调试方案。
基于qtcreator
的示教器插件开发调试方案
插件输出路径的设置:
aubo_caps
的运行必须加载到aubo_scope
的工作目录下,而当我们安装arcs
软件包后,会在root
(或者home
)目录下生成arcs_ws
的文件夹,该文件便是aubo_scope
的工作区间,因此,我们可以在构建可以运行的插件时,设置目标属性的输出路径在arcs_ws
下。
具体实现如下:(在插件工程的CMakeLists.txt
中设置,以示例插件工程myplugin
为例)
#设置插件的输出路径
set(PLUGIN_OUTPUT_PATH $ENV{HOME}/arcs_ws/extension)
#构建可以在 aubo_scope 中加载的插件
add_libary(myplugin SHARED
${_srcs}
${install_src}
${program_src}
)
set_target_properties(myplugin PROPERTIES
LABELS aubo_caps
OUTPUT_NAME myplugin
PREFIX ""
DEBUG_POSTFIX ""
LIBRARY_OUTPUT_DIRECTORY ${PLUGIN_OUTPUT_PATH}/myplugin
CXX_VISIBILITY_PRESET hidden
)
在该例子中,在生成
myplugin
动态库文件时,所用到的${_srcs}
、${install_src}
、${program_src}
文件,大家可以依据自己插件的需求进行设置。在设置生成的
myplugin
属性时,本教程大家只需要关注对于LIBRARY_OUTPUT_DIRECTORY
目标路径的设置,其他属性可以依据自己插件需求进行设置。
qtcreator
中插件工程的编译配置:
主要思路:更改插件工程的运行配置,使得在编译插件工程的时候,直接更新
arcs_ws
下该插件的内容并且运行aubo_scope
方便调试。具体配置:(这里以
myplugin
为例)打开
qtcreator
,并打开我们的插件工程。选择左侧菜单栏中项目,点击
run
。在该界面需要配置以下几个选项:Active Project
:选择插件工程。运行配置:需要增加一种新的运行配置,可点击右侧
add
来增加。EXecutable
:将该路径设置为aubo_scope
可执行文件的位置。安装arcs
时候默认安装在/opt/arcs
下。
建议
Build
的路径也进行自定义的设置:(一般设置为build
目录下)选择项目->Build->设置构建目录
在qtcreator中调试插件的一般流程:
在完成以上配置之后,需要选中刚配置好的选项,然后直接编译插件工程,即可进行对插件的调试。
若对该插件配置了多种运行方案,则需要选择刚配置的运行
aubo_scope
的配置(此处笔者的配置重命名为debug_myplugin
),如图:编译插件运行结果如下:
此处需要注意,在第一次加载插件到
aubo_scope
示教器时,需要为arcs_ws
提供插件的zip格式压缩包。
基于gdb
的示教器插件开发调试方案
插件输出路径的设置:
aubo_caps
的运行必须加载到aubo_scope
的工作目录下,而当我们安装arcs
软件包后,会在root
(或者home
)目录下生成arcs_ws
的文件夹,该文件便是aubo_scope
的工作区间,因此,我们可以在构建可以运行的插件时,设置目标属性的输出路径在arcs_ws
下。
具体实现如下:(在插件工程的CMakeLists.txt
中设置,以示例插件工程myplugin
为例)
#设置插件的输出路径
set(PLUGIN_OUTPUT_PATH $ENV{HOME}/arcs_ws/extension)
#构建可以在 aubo_scope 中加载的插件
add_libary(myplugin SHARED
${_srcs}
${install_src}
${program_src}
)
set_target_properties(myplugin PROPERTIES
LABELS aubo_caps
OUTPUT_NAME myplugin
PREFIX ""
DEBUG_POSTFIX ""
LIBRARY_OUTPUT_DIRECTORY ${PLUGIN_OUTPUT_PATH}/myplugin
CXX_VISIBILITY_PRESET hidden
)
在该例子中,在生成
myplugin
动态库文件时,所用到的${_srcs}
、${install_src}
、${program_src}
文件,大家可以依据自己插件的需求进行设置。在设置生成的
myplugin
属性时,本教程大家只需要关注对于LIBRARY_OUTPUT_DIRECTORY
目标路径的设置,其他属性可以依据自己插件需求进行设置。- 这样做的目的是在我们更新插件源码后,自动更新
arcs_ws
工作目录下的插件动态库文件,而不是像第一次在aubo_scope
中加载插件时需要手动在arcs_ws
目录下添加插件的zip
包。
基于gdb
的插件调试流程:
同样,第一次加载插件到aubo_scope
,必须将插件打包成zip
格式复制到arcs_ws
目录下。
编译插件源码:
进入插件工程根目录,然后执行以下命令:这里编译一定要注意保留
debug
信息,不然启动aubo_scope
,在插件中打上断点,并不会进入到插件动态库代码中。即:cmake -DCMAKE_BUILD_TYPE=Debug ..
mkdir -p build cd build cmake -DCMAKE_BUILD_TYPE=Debug.. make -j`nproc`
在
gdb
下启动aubo_scope
:aubo_scope
的默认安装路径在/opt/arcs
下,若有多个版本的aubo-scope
则需要选择合适的版本,然后进入bin
目录即可以找到aubo_scope
可执行文件。(此处笔者选择的是0.18.0版本)cd /opt/arcs/0.18.0/bin gdb ./aubo_scope
若启动成功会提示:
Reading symbols from ./aubo_scope...done.
设置断点,调试插件源码:(此处断点需设置到插件源码中)
可以直接利用
break
命令设置断点进行调试。以
myplugin
插件为例,展示一个及其简易的调试过程:编译
myplugin
源码:
- 启动
gdb
:
- 设置断点:(此处断点位置如下图所示)
- 查看断点处源码:(使用
list
命令可以查看当前堆栈区源码信息,默认显示 10 行)
- 查看变量值:(使用单步调式命令
b
让程序跑到int a = 100
的位置,使用p
命令查看a
的值)