如何在GDB的monitor命令中使用变量自动配置SEGGER RTT
解决GDB中monitor命令无法展开自定义变量的问题
问题核心在于monitor命令会直接将参数传递给底层调试工具(比如OpenOCD),GDB不会自动解析并展开monitor后面的自定义变量(如$rtt_offset、$rtt_size)。要实现自动调用monitor rtt setup并带入正确的符号值,需借助GDB的eval命令动态拼接执行命令。
具体实现步骤
- 先定义变量获取
_SEGGER_RTT的地址和大小:
set $rtt_offset = &_SEGGER_RTT set $rtt_size = sizeof _SEGGER_RTT
- 使用
eval命令拼接并执行monitor命令,通过格式符将变量值展开为实际的地址和数值:
eval "monitor rtt setup %p %d \"SEGGER RTT\"", $rtt_offset, $rtt_size
%p会将$rtt_offset格式化为指针地址(例如0x20000410)%d会将$rtt_size格式化为整数大小- 注意双引号需要用转义符
\"保留在最终的命令字符串中
- 将上述命令直接写入
.gdbinit文件,即可在GDB启动时自动完成RTT的初始化配置。
内容的提问来源于stack exchange,提问作者David van rijn
相关产品推荐
相关产品推荐

