插件调试指南 
在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 ..bash- 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版本)bash- cd /opt/arcs/0.18.0/bin gdb ./aubo_scope- 若启动成功会提示: gdb- Reading symbols from ./aubo_scope...done.
- 设置断点,调试插件源码:(此处断点需设置到插件源码中) - 可以直接利用 - break命令设置断点进行调试。- 以 - myplugin插件为例,展示一个及其简易的调试过程:- 编译 - myplugin源码: 
 - 启动gdb:
  - 设置断点:(此处断点位置如下图所示)
  - 查看断点处源码:(使用list命令可以查看当前堆栈区源码信息,默认显示 10 行)
  - 查看变量值:(使用单步调式命令b让程序跑到int a = 100的位置,使用p命令查看a的值)
  
