适用Keil MDK-ARM (uVision5)进入 Debug 模式后下方的 Command 窗口或 View → Command Window 打开。一、断点管理 (BKPT / BS / BL)硬件断点 (Breakpoint Set)BS func ; 在函数入口设断点 BS func, count 10 ; 第 10 次触发才停下 BS WRITE 0x20000100, 4 ; 写监视点4 字节 BS READ 0x20000100 ; 读监视点 BS READWRITE 0x20000100, 2 ; 读写监视点2 字节Cortex-M4 最多 6 个硬件断点 4 个硬件 watchpoint。软断点 / 条件断点BKPT addr ; 设置断点 BKPT addr, 表达式 ; 条件断点 BKPT main, i 5 ; 变量 i5 时才停断点操作BL ; 列出所有断点 BKILL * ; 删除所有断点 BKILL 1 ; 删除断点编号 1 BE 1 ; 启用断点 1 BD 1 ; 禁能断点 1二、内存查看 (D / DD / DW)D 0x20000000 ; 显示内存 (字节 hex) DD 0x20000000 ; 双字显示 DW 0x20000000 ; 字显示 D 0x20000000, 64 ; 显示 64 字节 D BYTE 0x20000000 ; 按字节 D LONG 0x20000000 ; 按长整型三、变量与表达式 (PRINT / EVAL)printf(val%d, hex%X\n, var, var) ; 打印变量值 printf(addr0x%08X\n, (unsigned int)variable) ; 打印变量地址 printf(*p%f\n, *((float *)0x20000100)) ; 从绝对地址读 float EVAL i 1 ; 计算表达式 EVAL sizeof(MODBUS_HOLD_REG_t) ; 查结构体大小四、寄存器操作 (R / RC)R ; 显示所有寄存器 R(R0) ; 查看 R0 R(PC) ; 查看 PC R(PC) 0x08000000 ; ★ 修改 PC危险 R(SP) ; 查看堆栈指针五、执行控制 (G / T / P / H)G ; 全速运行 (Go) G, addr ; 运行到指定地址 T ; 单步执行 (Step Into) T 10 ; 单步 10 次 P ; 单步跳过 (Step Over) H ; 单步跳出 (Step Out)六、信号量 / 线程RTOS 感知tasklist ; 列出所有 FreeRTOS/RTX 任务 taskinfo ; 任务详细信息 mrs 0xE000ED04 ; 读系统控制块寄存器七、实用组合追变量被谁改了; 1. 拿到地址 printf(addr0x%08X\n, a); ; 2. 设写监视点 BS WRITE 0x2000xxxx, 2 ; 3. 触发时自动打印 BS WRITE 0x2000xxxx, 2, i written!查看结构体偏移; 计算成员在结构体中的偏移 printf(offset%d\n, (unsigned int)((MODBUS_HOLD_REG_t *)0)-data);在断点触发时执行命令断点脚本BS myFunc, 1, printf(entered myFunc, arg%d\n, R0)运行时持续打印类似 printf 调试; 在关键函数入口设断点 打印 继续运行 BS Run, 1, printf(Run called, Step%d\n, Step); G八、外设寄存器 (PERIPH)DIR VTREG ; 虚拟寄存器 dir PERIPH ; 列出外设 PERIPH ADC1 ; 查看 ADC1 外设状态 PERIPH USART1 ; 查看 USART1 外设状态九、内存搜索; 搜索 16 位值 S 0x20000000, 0x20010000, 0x1234, 2 ; 搜索字节 S 0x20000000, 0x20010000, 0x55十、常用缩写对照命令全称作用BSBreakpoint Set设断点/监视点BLBreakpoint List列出断点BKILLBreakpoint Kill删除断点BE / BDBreakpoint Enable/Disable启用/禁用GGo运行TTrace (Step)单步进入PProceed (Step Over)单步跳过HHabit (Step Out)跳出函数RRegister查/改寄存器DDump内存转储典型调试场景速查场景命令找变量地址printf(addr%08X\n, (unsigned int)var)监视变量被写BS WRITE 0x2000xxxx, 2第 N 次才触发BS func, count 10断点不暂停只打印BS func, 1, printf(...)运行到指定行G, 0x0800xxxx看函数调用栈R(SP)后D 0x2000xxxx, 64手动回溯批量打印数组printf(%d,%d,%d\n, arr[0], arr[1], arr[2])查外设时钟PERIPH RCC
Keil MDK Debug 命令行常用命令
发布时间:2026/5/15 20:01:08
适用Keil MDK-ARM (uVision5)进入 Debug 模式后下方的 Command 窗口或 View → Command Window 打开。一、断点管理 (BKPT / BS / BL)硬件断点 (Breakpoint Set)BS func ; 在函数入口设断点 BS func, count 10 ; 第 10 次触发才停下 BS WRITE 0x20000100, 4 ; 写监视点4 字节 BS READ 0x20000100 ; 读监视点 BS READWRITE 0x20000100, 2 ; 读写监视点2 字节Cortex-M4 最多 6 个硬件断点 4 个硬件 watchpoint。软断点 / 条件断点BKPT addr ; 设置断点 BKPT addr, 表达式 ; 条件断点 BKPT main, i 5 ; 变量 i5 时才停断点操作BL ; 列出所有断点 BKILL * ; 删除所有断点 BKILL 1 ; 删除断点编号 1 BE 1 ; 启用断点 1 BD 1 ; 禁能断点 1二、内存查看 (D / DD / DW)D 0x20000000 ; 显示内存 (字节 hex) DD 0x20000000 ; 双字显示 DW 0x20000000 ; 字显示 D 0x20000000, 64 ; 显示 64 字节 D BYTE 0x20000000 ; 按字节 D LONG 0x20000000 ; 按长整型三、变量与表达式 (PRINT / EVAL)printf(val%d, hex%X\n, var, var) ; 打印变量值 printf(addr0x%08X\n, (unsigned int)variable) ; 打印变量地址 printf(*p%f\n, *((float *)0x20000100)) ; 从绝对地址读 float EVAL i 1 ; 计算表达式 EVAL sizeof(MODBUS_HOLD_REG_t) ; 查结构体大小四、寄存器操作 (R / RC)R ; 显示所有寄存器 R(R0) ; 查看 R0 R(PC) ; 查看 PC R(PC) 0x08000000 ; ★ 修改 PC危险 R(SP) ; 查看堆栈指针五、执行控制 (G / T / P / H)G ; 全速运行 (Go) G, addr ; 运行到指定地址 T ; 单步执行 (Step Into) T 10 ; 单步 10 次 P ; 单步跳过 (Step Over) H ; 单步跳出 (Step Out)六、信号量 / 线程RTOS 感知tasklist ; 列出所有 FreeRTOS/RTX 任务 taskinfo ; 任务详细信息 mrs 0xE000ED04 ; 读系统控制块寄存器七、实用组合追变量被谁改了; 1. 拿到地址 printf(addr0x%08X\n, a); ; 2. 设写监视点 BS WRITE 0x2000xxxx, 2 ; 3. 触发时自动打印 BS WRITE 0x2000xxxx, 2, i written!查看结构体偏移; 计算成员在结构体中的偏移 printf(offset%d\n, (unsigned int)((MODBUS_HOLD_REG_t *)0)-data);在断点触发时执行命令断点脚本BS myFunc, 1, printf(entered myFunc, arg%d\n, R0)运行时持续打印类似 printf 调试; 在关键函数入口设断点 打印 继续运行 BS Run, 1, printf(Run called, Step%d\n, Step); G八、外设寄存器 (PERIPH)DIR VTREG ; 虚拟寄存器 dir PERIPH ; 列出外设 PERIPH ADC1 ; 查看 ADC1 外设状态 PERIPH USART1 ; 查看 USART1 外设状态九、内存搜索; 搜索 16 位值 S 0x20000000, 0x20010000, 0x1234, 2 ; 搜索字节 S 0x20000000, 0x20010000, 0x55十、常用缩写对照命令全称作用BSBreakpoint Set设断点/监视点BLBreakpoint List列出断点BKILLBreakpoint Kill删除断点BE / BDBreakpoint Enable/Disable启用/禁用GGo运行TTrace (Step)单步进入PProceed (Step Over)单步跳过HHabit (Step Out)跳出函数RRegister查/改寄存器DDump内存转储典型调试场景速查场景命令找变量地址printf(addr%08X\n, (unsigned int)var)监视变量被写BS WRITE 0x2000xxxx, 2第 N 次才触发BS func, count 10断点不暂停只打印BS func, 1, printf(...)运行到指定行G, 0x0800xxxx看函数调用栈R(SP)后D 0x2000xxxx, 64手动回溯批量打印数组printf(%d,%d,%d\n, arr[0], arr[1], arr[2])查外设时钟PERIPH RCC