在尝试调试这个基本的 risc-v 汇编代码片段时,gdb 显示不同的寄存器值。
start:
li a0, 138
li a1, 138
mv a2, a0
loop:
j loop
“信息寄存器 a0”返回“a0 0x20000000 536870912”
“信息寄存器 a1”返回“a1 0x8a 138”
“信息寄存器 a2”返回“a2 0x8a 138”
显然,a0 寄存器保存了从 a0 到 a2 的移动操作所显示的预期值,但为什么 gdb 显示了完全不同的值?
此最小代码在 ESP32-C3 MCU 上执行,通过其集成 JTAG 外设进行调试。
尝试过mingw64的gdb-multiarch、自编译的riscv32-none-elf-gdb, 官方打包的和乐鑫定制的 OpenOCD 程序,所有组合都显示相同的结果,似乎完全忽略了该寄存器的内容。
有趣的是,删除并安装整个工具链再次解决了这个问题。
无法击败旧的“你是否尝试过将其关闭并再次打开”......