AliOS Things 维测高阶能力之数据断点(DWT)使用

简介: ### 1.    数据断点DWT介绍 在ARM Cortex-M及A系列CPU中,有很多调试组件,使用它们可以执行各种调试功能,包括断点(breakpoint)、数据段点(Data WatchPoint 即 DWT)及各种跟踪(trace)等。 硬件调试模块允许内核在访问数据断点时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将

1.    数据断点DWT介绍

在ARM Cortex-M及A系列CPU中,有很多调试组件,使用它们可以执行各种调试功能,包括断点(breakpoint)、数据段点(Data WatchPoint 即 DWT)及各种跟踪(trace)等。


硬件调试模块允许内核在访问数据断点时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查询的。完成查询后,内核和外设可以被复原,程序将继续执行。


数据断点在调试内存被非法改写的时候非常有用,以往我们遇到类似问题的时候,经常使用JLINk+GDB的这一黄金组合来watch住一个变量(或者一段内存),将这个变量设置成只读,或者不可访问的模式,当它被访问或者改写的时候,系统就会Halt停下,这时我们可以查看系统状态、内存值、BT命令查看调用者等等,帮助调试。


如:在gdb中可通过下面的几种方法来设置watchpoint:


(gdb) watch  
     在指定变量/内存地址(表达式)expr设置一个watchpoint。一但expr值有变化时,将停住程序。


(gdb) rwatch
     当expr被读时,停住程序。


(gdb) awatch
当expr被读或被写时,停住程序。


(gdb) info watchpoints
查看watchpoint

(gdb)d n
删除watchpoint, 同删除breakpoint一样


举例:
想监控0地址处其实的1K字节是否被访问,若有read或者write访问,则程序停下
awatch (char[1024])*0x0

想监控0x1001dd08处的一段结构体的内部数据是否被改写,若发生改写则程序停下,只读无影响
watch ((k_mm_list_t *)0x1001dd08)->mbinfo->free_ptr


上述调试方法是硬件板子上JTAG或SWD口引出来后支持的调试手段,在IOT设备中,硬件往往很小,这类调试口经常是没有引出来的,在这种环境下,AliOS Things支持了一种在线数据断点的功能,即提供API接口,可以在软件中增加watch点,达到硬件GDB的DWT功能。

2.    AliOS Things在线数据断点DWT的实现

2.1    AliOS Things下在线数据断点说明

使用限制:当前仅支持 ARMV7m的数据断点,即Cortex-M3/M4系列CPU
需要说明的是:
1.    ARM9(armv5)架构的CPU由于ARM没有将DWT相关的寄存器透出,所以无法使用软件在线数据断点的功能,只能通过仿真器使用硬件DWT。
2.    Cortex A系列DWT的使用介绍将在后续给出
3.    ARMV7m支持的DWT的个数为4个

给出2个API:

2.2    API 列表

API 说明
debug_watch_on(void *addr) 启动DWT,监控一个地址(4 字节的数据)
debug_watch_off() 关闭DWT

调用示例1:watch一个全局变量

int g_dwt_test = 0;

void debug_watch_on(&g_dwt_test);
...

调用示例2:栈溢出检测

检测原理:任务的栈底base 保存的是固定的magic,正常情况下任务的栈大小足够大,任务的运行过程中任务栈不会下探到栈底stack_base的位置,如果发生这种情况,magic值被改写,就发生了栈溢出的情况。
所以我们在在任务被调度之前watch on栈底的magic,在任务被调度出去的之后watch off
如:

/*任务的栈底base 保存的是固定的magic*/
void * watch_addr = g_next_task->stack_base;

debug_watch off();
debug_watch_on(watch_addr);

cpu_task_switch();
...    
   

2.3   watch命中后的使用

AliOS Things维测组件提供了强大的系统异常快照功能
(参考ATA:https://www.atatech.org/articles/134601
我们将系统快照功能对接到DWT数据断点上,即发生watch命中后,自动输出当前系统的寄存器、任务状态、内存状态、OS(mutex/sem/bufqueue)状态以及此时的栈回溯backtrace ,可以直接显示当前谁改写了变量,导致了watch点的发生,大大提高了bug定位效率。


总结:watch命令可以在代码中的任意使用,无需连接硬件,结合AliOS Things维测特性,对内存改写、栈溢出等Bug定位非常有效

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
安全 小程序 物联网
阿里云物联网操作系统AliOS Things,获国内顶级开源组织颁发大奖
12月30日,由阿里云AIoT推出的物联网操作系统AliOS Things再度拿下重要荣誉,由中国开源云联盟举办的《第十届中国云计算标准和应用大会》上,AliOS Things 入选中国优秀开源项目。
301 2
阿里云物联网操作系统AliOS Things,获国内顶级开源组织颁发大奖
|
开发框架 IDE JavaScript
开发者新宠上线 阿里云物联网操作系统AliOS Things3.3.0发布
近日,阿里云物联网操作系统AliOS Things时隔一年,新版本AliOS Things 3.3.0正式开源发布。作为广大开发者的新宠,AliOS Things 3.3.0推出轻应用开发模式,为碎片化的物联网提供统一的操作系统解决方案。
483 1
开发者新宠上线 阿里云物联网操作系统AliOS Things3.3.0发布
|
人工智能 小程序 安全
阿里云物联网操作系统AliOS Things获国家重点研发计划立项
近日,阿里云物联网操作系统AliOS Things正式通过了国家重点研发计划重点专项2020年度立项,国家重点研发计划是我国最高级别的研发项目,意味着国家层面对AliOS Things的高度认可,该操作系统也将获得一系列的后续政策扶持。
396 1
阿里云物联网操作系统AliOS Things获国家重点研发计划立项
|
安全 小程序 物联网
阿里云物联网操作系统AliOS Things,获国内顶级开源组织颁发大奖
12月30日,由阿里云AIoT推出的物联网操作系统AliOS Things再度拿下重要荣誉,由中国开源云联盟举办的《第十届中国云计算标准和应用大会》上,AliOS Things 入选中国优秀开源项目。
阿里云物联网操作系统AliOS Things,获国内顶级开源组织颁发大奖
|
人工智能 小程序 安全
阿里云物联网操作系统AliOS Things获国家重点研发计划立项
近日,阿里云物联网操作系统AliOS Things正式通过了国家重点研发计划重点专项2020年度立项,国家重点研发计划是我国最高级别的研发项目,意味着国家层面对AliOS Things的高度认可,该操作系统也将获得一系列的后续政策扶持。
阿里云物联网操作系统AliOS Things获国家重点研发计划立项
|
开发框架 运维 监控
阿里云联合模组厂商发布内嵌AliOS Things的4G Cat 1模组
阿里云联合移远通信发布内嵌AliOS Things的4G Cat 1模组
阿里云联合模组厂商发布内嵌AliOS Things的4G Cat 1模组
|
数据可视化 IDE 物联网
阿里云物联网积累解读(一):AliOS Things
嵌入式工程师灵魂三问:环境搭建好了吗?调试完了吗?Emmm……可以换个板子吗?
阿里云物联网积累解读(一):AliOS Things
|
传感器 数据可视化 NoSQL
AliOS Things+阿里云 10分钟搭建智慧农业解决方案
AliOS Things+阿里云 10分钟搭建智慧农业解决方案 1.1 样品介绍 在工业、农业物联网布线场景中以MODBUS类型为主,样品提供MODBUS类型传感器硬件和软件快速接入方案,并将传感器数据上传到阿里云物联网平台,在云端table store数据库存储,在datav数据大屏上可视化展示。
9872 4
|
资源调度 物联网 芯片
AliOS Things正式开源,走近阿里云的物联网技术
一句话介绍面向汽车、IoT终端、IoT芯片和工业领域研发的物联网操作系统,并且整合了原YunOS移动端业务。AliOS Things将会开源,广大IoT终端厂商、独立开发者可以共同建造、不断忧化并加强OS功能。
6700 1