都知道由于流水线的原因 PC值=当前程序执行地址 + 8,那么用GDB 读取寄存器后,为了获得当前正在执行的指令地址,是否需要将当前 PC 值 - 8 来计算?
从实际调试看,好像不需要这个操作,难道 gdb 自动计算了吗
都知道由于流水线的原因 PC值=当前程序执行地址 + 8,那么用GDB 读取寄存器后,为了获得当前正在执行的指令地址,是否需要将当前 PC 值 - 8 来计算?
从实际调试看,好像不需要这个操作,难道 gdb 自动计算了吗
是的,GDB会自动将PC值减去8来计算当前正在执行的指令地址,因此在使用GDB进行调试时,一般不需要手动将PC值减去8来计算指令地址。
这是因为在计算PC值时,CPU会将当前指令的地址加上4,得到下一条指令的地址,因此GDB在读取PC寄存器的值时,实际上得到的是下一条指令的地址。为了得到当前正在执行的指令地址,GDB会自动将PC值减去8,其原理是基于CPU流水线的设计,CPU在执行指令时,当前指令的地址已经被加上了4,而GDB需要得到的是当前指令的地址,因此需要将PC值减去8。
因此,在使用GDB调试时,可以直接读取PC寄存器的值,无需手动减去8来计算当前正在执行的指令地址。