在 gdb 中,我们可以将变量设置为表达式吗?

in gdb, can we set a variable as an expression?

在u-boot C代码中,值“gd”是这样声明的。 (手臂)

register volatile gd_t *gd asm ("r9")  

并且寄存器 r9 包含指向结构 global_data 的指针。 (类型定义为 gd_t)

而debugging/analying,在C代码中看到gd->malloc_base,输入“p gd->malloc_base”不起作用。它说 Missing ELF symbol "gd".
后来才知道应该做"p ((gd_t *)$r9)->malloc_base"才能看到值。 我每天多次输入这种命令。有没有一种方法可以在 gdb 中分配一个代表 ((gd_t *)$r9) 的变量?为什么 gdb 无法识别代码中的值 gd?
我想做的是创建一个代表 ((gd_t *)$r9) 的变量,这样我就可以像 gd->ram_top 或 gd->env_has_init 一样使用它,等等。到我很好奇的价值。

这是@ssbssa 对我的问题的评论(感谢@ssbssa)。我让他写下他的答案,但他没有。所以我自己添加答案。
您可以像 macro define gd ((gd_t *)$r0) 这样定义宏,然后您可以稍后使用 p /x gd->reloc_offp /x gd->flags。当然你可以把这个宏定义命令放在命令文件中,这样启动gdb arm-none-eabi-gdb u-boot -x gdb_command.