在 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_off
或 p /x gd->flags
。当然你可以把这个宏定义命令放在命令文件中,这样启动gdb arm-none-eabi-gdb u-boot -x gdb_command
.
在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_off
或 p /x gd->flags
。当然你可以把这个宏定义命令放在命令文件中,这样启动gdb arm-none-eabi-gdb u-boot -x gdb_command
.