如何使用gdb在PPC上查看DAR(数据访问寄存器)的内容?
我正在嵌入式PPC平台上进行调试(arch是ppc750),我注意到当二进制崩溃时,如果我在gdb中键入“info registers”,我就看不到DAR(数据访问寄存器)的内容,它应该显示程序试图读取的内存地址-我只得到陷阱寄存器,它告诉我异常的类型:如何使用gdb在PPC上查看DAR(数据访问寄存器)的内容?,gdb,embedded,Gdb,Embedded,我正在嵌入式PPC平台上进行调试(arch是ppc750),我注意到当二进制崩溃时,如果我在gdb中键入“info registers”,我就看不到DAR(数据访问寄存器)的内容,它应该显示程序试图读取的内存地址-我只得到陷阱寄存器,它告诉我异常的类型: (gdb) info registers r0 0x1034875e 271877982 r1 0x7fffed30 2147478832 r2
(gdb) info registers
r0 0x1034875e 271877982
r1 0x7fffed30 2147478832
r2 0xfd7f7a0 265811872
[...]
pc 0xf18d718 0xf18d718
msr 0xd032 53298
cr 0x80000848 2147485768
lr 0xf18d6f8 0xf18d6f8
ctr 0xf235d90 253975952
xer 0x20000000 536870912
orig_r3 0x26 38
trap 0x300 768
这可能吗?我使用的是GDB7.0.1(我知道有点旧,但最近的版本不能很好地使用我们古老的工具链)
我看不到DAR(数据访问寄存器)的内容
据我所知,该寄存器仅在内核模式下可用
你在“裸机”上调试吗?如果没有,您不应该首先查找DAR
寄存器
我看不到DAR(数据访问寄存器)的内容
据我所知,该寄存器仅在内核模式下可用
你在“裸机”上调试吗?如果不是,您首先不应该查找DAR
寄存器。不,我不是在“裸机”上调试,而是在用户空间的Linux上调试。我注意到,即使在PPC上接收到SIGSEGV,导致无效访问的地址也可以在信号处理程序中使用(在si_addr字段中,IIRC)。我只是想知道gdb中是否也有这些信息。据gdb列表上的人说,检查PPC上的$_siginfo自gdb 7.5起就起作用,但我们在使用7.3及更高版本的二进制文件时遇到了问题。不,我不是在“裸机”上调试,而是在用户空间的Linux上调试。我注意到,即使在PPC上接收到SIGSEGV,导致无效访问的地址也可以在信号处理程序中使用(在si_addr字段中,IIRC)。我只是想知道gdb中是否也有这些信息。据gdb列表上的人说,检查PPC上的$_siginfo自gdb 7.5起就可以工作,但我们在使用7.3及更高版本的二进制文件时遇到了问题,这些二进制文件是用我们古老的工具链构建的。