Skip to content

插件调试指南

aubo_caps 开发过程中,需要频繁在 aubo_scope 示教器中调试正在开发的插件。本教程基于 Qt CreatorGDB 命令行分别进行调试说明,开发者可以根据个人使用习惯,选择更适合自己的调试方案。

1. 基于 Qt Creator 的示教器插件开发调试方案

1.1 设置插件输出路径

在安装 arcs 软件包后,root(或 home)目录下会生成 arcs_ws 文件夹,该文件便是 aubo_scope 的工作区间。由于 aubo_caps 必须加载到 aubo_scope 的工作目录下再运行,在构建可运行的插件时,可以将目标属性的输出路径设置在 arcs_ws 下。

以插件工程 myplugin 为例,在插件工程的 CMakeLists.txt 中设置插件输出路径,具体实现方式如下:

cmake
#设置插件的输出路径
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 目标路径的设置,其他属性可以依据自己插件的需求进行设置。

1.2 Qt Creator 中插件工程的编译配置

更改插件工程的运行配置,可以使在编译插件工程的时候,能够直接更新 arcs_ws 下该插件的内容并且运行 aubo_scope,更方便调试。以 myplugin 为例,具体操作流程如下:

  1. 打开 Qt Creator,并打开目标插件工程。

  2. 选择左侧菜单栏中【项目】界面,点击【run】。在该界面需要配置以下几个选项:

    • Active Project”:需选择目标插件工程;

      • “运行配置”:点击右侧【add】,增加新的运行配置;

      • EXecutable”:需点击【浏览】将路径设置为 aubo_scope 可执行文件的位置。在安装 arcs 时,通常默认安装在 /opt/arcs 下。

  3. Build 的路径一般设置在 build 目录下,建议也进行自定义的设置。操作顺序为:

​ “项目 > Build > 设置构建目录”

1.3 在 Qt Creator 中调试插件

完成以上配置之后,选中刚配置好的选项,然后直接编译插件工程,即可进行对插件的调试。

注意:

  1. 若对该插件配置了多种运行方案,则需要选择刚配置的运行 aubo_scope 的配置(此处将配置重命名为 debug_myplugin),如图所示:

​ 编译插件运行结果如下:

  1. 在第一次加载插件到 aubo_scope 示教器时,需要为 arcs_ws 提供插件的zip格式压缩包。

2. 基于GDB的示教器插件开发调试方案

2.1 插件输出路径的设置

在安装 arcs 软件包后,root(或 home)目录下会生成 arcs_ws 文件夹,该文件便是 aubo_scope 的工作区间。由于 aubo_caps 必须加载到 aubo_scope 的工作目录下再运行,在构建可运行的插件时,可以将目标属性的输出路径设置在 arcs_ws 下。

以插件工程 myplugin 为例,在插件工程的 CMakeLists.txt 中设置插件输出路径,具体实现方式如下:

cmake
#设置插件的输出路径
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 包。

2.2 基于 GDB 的插件调试流程

第一次加载插件到 aubo_scope,必须将插件打包成 zip 格式复制到 arcs_ws 目录下。

  1. 编译插件源码,进入插件工程根目录,然后执行以下命令:

    bash

mkdir -p build cd build cmake -DCMAKE_BUILD_TYPE=Debug.. make -jnproc


注意:编译时一定要注意保留 `debug` 信息,否则启动 `aubo_scope`会在插件中打上断点,不能进入到插件动态库代码中。即:`cmake -DCMAKE_BUILD_TYPE=Debug ..`

2. 在 `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.
  1. 设置断点、调试插件源码。断点需设置到插件源码中,可以直接利用 break 命令设置断点进行调试。这里以 myplugin 插件为例,展示一个简易的调试过程:

    1. 编译 myplugin 源码:

​ 2. 启动 GDB


​ 3. 设置断点,此处断点位置如下图所示:


​ 4. 查看断点处源码:

​ 使用 list 命令可以查看当前堆栈区源码信息,默认显示 10 行。


​ 5. 查看变量值:

​ 使用单步调式命令 b 让程序跑到 int a = 100 的位置,使用 p 命令查看 a的值。