Go to file
skythinker 3816ad6402 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
gdb 提交V1.0.0版本 2022-01-02 00:31:59 +08:00
imgs 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
lower 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
openocd 提交V1.0.0版本 2022-01-02 00:31:59 +08:00
qss 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
LICENSE Initial commit 2022-01-01 15:38:02 +00:00
LinkScope.pro 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
LinkScope.pro.user 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
README.md 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
aboutwindow.cpp 增加变量选择器;美化帮助窗口和关于窗口;添加反馈通道;添加检查更新功能;版本号更新为V1.0.2 2022-01-29 20:20:15 +08:00
aboutwindow.h 增加变量选择器;美化帮助窗口和关于窗口;添加反馈通道;添加检查更新功能;版本号更新为V1.0.2 2022-01-29 20:20:15 +08:00
aboutwindow.ui 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
gdbprocess.cpp 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
gdbprocess.h 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
graphwindow.cpp 优化界面样式;修复符号文件路径不支持非ASCII字符的问题;增加对elf格式的支持;添加未选择符号文件的警告框;修复连接错误导致闪退的问题;版本号更新为1.0.1 2022-01-25 16:13:54 +08:00
graphwindow.h 提交V1.0.0版本 2022-01-02 00:31:59 +08:00
graphwindow.ui 提交V1.0.0版本 2022-01-02 00:31:59 +08:00
helpwindow.cpp 增加变量选择器;美化帮助窗口和关于窗口;添加反馈通道;添加检查更新功能;版本号更新为V1.0.2 2022-01-29 20:20:15 +08:00
helpwindow.h 增加变量选择器;美化帮助窗口和关于窗口;添加反馈通道;添加检查更新功能;版本号更新为V1.0.2 2022-01-29 20:20:15 +08:00
helpwindow.ui 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
icon.ico 提交V1.0.0版本 2022-01-02 00:31:59 +08:00
listwindow.cpp 增加串口模式及下位机代码;提升GDB执行速度;增加对"class"的展开支持;变量名匹配排除':';修复选择窗口根节点展开出现成员变量名的问题;修复删除变量后GDB仍继续监视的问题;版本号更新至V1.1.0 2022-02-03 22:14:14 +08:00
listwindow.h 重构,将GDB控制部分提取为单独模块;符号文件选择框过滤器添加"所有文件" 2022-01-30 18:32:39 +08:00
listwindow.ui 增加变量选择器;美化帮助窗口和关于窗口;添加反馈通道;添加检查更新功能;版本号更新为V1.0.2 2022-01-29 20:20:15 +08:00
logwindow.cpp 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
logwindow.h 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
logwindow.ui 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
main.cpp 提交V1.0.0版本 2022-01-02 00:31:59 +08:00
mainwindow.cpp 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
mainwindow.h 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
mainwindow.ui 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
openocd.cpp 重构,将OpenOCD进程控制相关代码提取为一个独立模块 2022-01-31 00:06:57 +08:00
openocd.h 重构,将OpenOCD进程控制相关代码提取为一个独立模块 2022-01-31 00:06:57 +08:00
res.qrc 增加变量选择器;美化帮助窗口和关于窗口;添加反馈通道;添加检查更新功能;版本号更新为V1.0.2 2022-01-29 20:20:15 +08:00
serialocd.cpp 加入日志功能;添加窗口状态自动保存;单次读取字节数限制由上位机转到下位机;略降低采样速度以降低CPU占用率;版本号更新为V1.2.0 2022-02-18 22:36:23 +08:00
serialocd.h 增加串口模式及下位机代码;提升GDB执行速度;增加对"class"的展开支持;变量名匹配排除':';修复选择窗口根节点展开出现成员变量名的问题;修复删除变量后GDB仍继续监视的问题;版本号更新至V1.1.0 2022-02-03 22:14:14 +08:00
vartype.h 提交V1.0.0版本 2022-01-02 00:31:59 +08:00

README.md

LinkScope


项目简介

本程序使用QT编写用于硬件设备的调试可直接驱动串口或各种调试器基于OpenOCD支持有以下几个主要特性

  • 主要功能

    • 实时查看修改变量值

    • 变量值波形实时绘制

    • 采样数据导出到CSV表格

    • 格式化日志输出

  • 调试器模式理论上支持OpenOCD允许GDB连接的各种调试器及硬件芯片如STLink、JLink、CMSIS-DAP等以及STM32全系列等

  • 调试器模式下采样最高约100Hz串口模式约80Hz

  • 图形化变量选择器

目前进行了以下设备的测试 调试器STLink、CMSIS-DAP 目标芯片STM32F103RCT6、STM32F103C8T6

运行演示


使用方法

  1. 若使用串口连接,需先将串口下位机程序移植到目标芯片中 串口移植说明

  2. 若使用日志功能,需先将日志下位机程序移植到目标芯片中日志移植说明

注:串口与日志功能不冲突,可以同时使用

  1. 点击设置符号文件,添加变量

    • 加载符号文件后即可在变量选择窗口添加需要查看的变量,可以直接添加到列表或添加到编辑框后进行手动编辑

    • 在主窗口表格最后一行变量名(编辑框)处手动填写也可以添加变量

    • 在主窗口中选中变量名按Del键可删除变量

    • 变量名不仅可以填入单个变量名还可以填入合法的C语言表达式GDB支持即可复合类型不能修改和绘图只能实时查看

  2. 选择连接模式,连接芯片,连接后程序开始循环采样

    • 调试器模式下,在下拉框中选择调试器和芯片类型,点击连接目标

    • 串口模式下,点击刷新串口加载串口列表,选中所连接的串口,点击连接目标

  3. 编辑修改变量列可以修改变量值,双击图线颜色列可以选择绘图颜色

  4. 单击变量名列选中对应的变量,绘图窗口会加粗绘制波形,左下角会显示当前值和查看值(拖动鼠标进行查看)

  5. 绘图界面说明可以在绘图窗口点击操作说明查看,滚轮配合CtrlShiftAlt可以实现画面的缩放和移动

操作演示

日志输出


主要菜单项说明

  • 刷新连接配置:连接配置文件位于openocd/share/openocd/scripts下的targetinterface用户可按照OpenOCD语法编写配置脚本放入对应目录下然后点击该菜单项将配置文件加载到下拉选框中

  • 保存配置:软件中所配置的连接模式、调试器型号、芯片型号、符号文件路径和各变量的配置都可以通过该菜单项保存到一个配置文件中

  • 导入配置:将上述保存的配置文件重新载入软件中

  • 导出数据将获取到的各变量采样数据导出到CSV表格文件

  • 显示绘图窗口:手动关闭绘图窗口后可以通过这个菜单项重新打开并显示到前台

  • 显示选择窗口:手动关闭变量选择窗口后可以通过这个菜单项重新打开并显示到前台


使用注意事项

  • 若不指定符号文件,无法使用变量名,只能通过绝对地址进行查看

  • 修改符号路径后需要重新连接

  • 本程序不带下载功能,连接目标前请确认已为目标芯片下载过指定程序;若更换为不同类型的调试器,即使芯片程序没有变动,也应使用更换后的调试器再次下载程序

  • 下位机程序应使用与上位机同时发行的版本,更新上位机软件后应同时更新下位机程序


已知问题及解决方法

  • 若程序在调试器连接模式下发生错误闪退,可能在下次运行时无法成功连接目标,可以尝试手动查找openocd.exe进程并强制结束

  • 串口模式下从地址0读取单个字节结果恒为0若要读取地址0可以使用大于1字节的类型


其他说明

  • 关于采样速度

    • 采样速度与CPU占用率、添加的变量数量、日志输出频率等因素相关程序会以尽可能高的速度进行采样

    • 简介中介绍的采样速度是在i5-8265UCPU接近空载时添加单个变量并关闭日志的情况下测试得到的

    • 调试器模式下获取单条日志用时约50ms串口模式约90ms获取过程中无法进行采样若日志数量较多则会对采样速度造成较大影响


TODO

  • 增加对不同文件中同名变量的区分

  • 提升采样频率

  • 增加对本地程序的支持


运行过程简介

  • 调试器模式下连接目标时程序会在后台启动OpenOCD进程进行连接并命令GDB进程连接到OpenOCD串口模式下OpenOCD被替换为一个Tcp服务器用于解析GDB指令并收发串口数据

  • 运行过程中程序会不断模拟与GDB进程进行命令行交互在用户添加变量时使用display expr指令将变量添加到GDB的查看表中同时定时10ms发送display指令并进行正则解析,更新用户界面

  • 程序开有一个微秒级定时器,每收到一个变量采样数据时,会从该定时器获取当前的时间戳并与数据一起记录下来,同时绘图窗口会不断对历史数据进行更新绘图

  • GDB不支持符号文件路径中含有非ASCII字符因此在连接GDB前会将指定符号文件复制到GDB目录下并用相对路径读取断开连接时删除临时文件

  • 变量选择窗口另开有一个GDB进程用于解析符号文件内部使用树形结构存储各级变量信息在用户每展开一级树形图时使用info variableswhatisptype指令从GDB获取下一级变量类型信息并用正则表达式解析

  • 日志下位机程序会创建一个缓冲区队列下位机会将日志输出到缓冲区中程序会定时使用GDB的print指令将日志出队并解析显示出来


仓库文件说明

  • lower目录下为下位机程序

  • 编译QT程序后需要将gdbopenocd目录复制到可执行文件同级目录下