[watchpoint]

定义

Watchpoint(观察点)是一种强大的调试工具,允许开发者在特定内存地址被访问(读取或写入)时暂停程序执行,非常适合调试内存相关的问题。

类型

在这里插入图片描述

使用

gdb

# 监控变量写入
(gdb) watch <variable>

# 监控内存地址写入(0x7fffffffde40 为例)
(gdb) watch *(int*)0x7fffffffde40

# 监控读取行为
(gdb) rwatch <variable>

# 监控读写行为
(gdb) awatch <variable>
# 条件触发(仅当 var == 5 时触发)
(gdb) watch var if var == 5

# 查看当前观察点
(gdb)
 info watchpoints

# 自动执行命令后继续
(gdb) commands <watchpoint_num>
>
print backtrace
>
continue
>end

嵌入式C

ARM Cortex-M 的 DWT 单元

// 硬件配置示例(STM32 HAL)
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;  // 启用跟踪
DWT->COMP0 = (uint32_t)&critical_var;           // 监控变量地址
DWT->FUNCTION0 = (0x3 << 4) | 0x1;             // 读写监控+启用
### DWT(Data Watchpoint and Trace)的详细信息 DWT(Data Watchpoint and Trace)是 Cortex-M 系列处理器中的一个调试外设,主要用于系统调试和跟踪功能。该模块支持实时变量监控、PC 采样等功能,可以用于周期性地输出程序计数器(PC)或各种 CPU 内部计数器,从而获取目标系统的性能分析信息。例如,开发者可以利用 DWT 来检测特定内存地址的访问,或在变量被修改时触发中断,以便进行调试分析[^2]。 #### 核心功能 - **数据观察点(Data Watchpoint)** DWT 支持设置多个数据观察点,当程序访问特定的内存地址时,可以触发调试中断。例如,在变量被修改时,系统可以进入调试模式,便于开发者分析问题根源。这种机制在调试复杂逻辑或并发任务时非常有用[^2]。 - **PC 采样(PC Sampling)** 通过 DWT 的 PC 采样功能,可以周期性地记录程序计数器的值。这种机制可用于分析代码的执行路径和热点函数,进而优化程序性能。例如,可以使用 DWT 来统计某段代码的执行频率,并结合系统时钟周期计算其执行时间[^2]。 - **CYCCNT(Cycle Count)** CYCCNT 是 DWT 模块中的一个 32 位计数器,用于记录 CPU 的时钟周期数。通过读取该寄存器,开发者可以实现高精度的时间测量。例如,以下代码片段展示了如何使用 CYCCNT 来测量代码执行时间: ```c #define start_timer() (*((volatile uint32_t*)0xE0001000)) = 0x40000001 #define stop_timer() (*((volatile uint32_t*)0xE0001000)) = 0x40000000 #define get_timer() (*((volatile uint32_t*)0xE0001004)) uint32_t it1, it2; start_timer(); it1 = get_timer(); // 执行需要测量的代码 it2 = get_timer() - it1; stop_timer(); ``` 该方法可用于测量程序段的执行时间,精度可达纳秒级别,适用于需要高精度时间戳的场景,如操作系统调度、实时控制等[^3]。 #### 硬件支持与调试接口 DWT 模块集成在 Cortex-M 的调试系统中,通常与 ITM(Instrumentation Trace Macrocell)和 TPIU(Trace Port Interface Unit)配合使用,用于输出调试信息。例如,在 STM32 系列微控制器中,DWT 模块位于调试支持(Debug Support)章节中,相关框图可在 STM32 用户手册中找到。开发者可以通过 JTAG 或 SWD 接口访问 DWT 寄存器,进行调试和跟踪操作[^1]。 #### 应用示例 在实际调试过程中,DWT 可用于设置触发源,并在特定条件下触发中断。例如,当某个变量的值发生变化时,DWT 可以触发调试中断,使程序暂停运行,并通过串口输出调试信息。以下是一个典型的 DWT 中断输出示例: ``` DWT watchpoint demo!! Hit any key to start set dwt watchpoint ****default_isr entered on vector 12***** comparator match ``` 该示例展示了如何在变量被访问时触发中断,并通过串口输出调试信息。这种机制在调试嵌入式系统时非常实用,可以有效定位变量异常修改等问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值