如何在gdb中转储所有的XMM寄存器?

17

我可以使用以下命令在gdb中转储所有整数寄存器:

info registers

对于xmm寄存器(英特尔),我需要一个类似于以下的文件:

print $xmm0
print $xmm1
...
print $xmm15

然后引用那个文件。有没有更简单的方法?


半相关:MMX寄存器在GDB中的工作不太容易,因为它们与x87堆栈寄存器别名:为什么GDB无法自动完成mmx寄存器名称(mm0-mm7) - Peter Cordes
3个回答

14
(gdb) apropos registers
collect -- Specify one or more data items to be collected at a tracepoint
core-file -- Use FILE as core dump for examining memory and registers
info all-registers -- List of all registers and their contents
...
最后一个是你要找的答案。 另请参见下面此答案

我已经尝试使用 "apropos xmm",但没有想到寄存器。谢谢。 - Peeter Joot
1
有没有仅转储MMX寄存器的方法?“info mmx”和“info mmx-registers”对我都无效。 我猜我是在问,这是全部还是没有?否则,分页器会停止我的工作流程。 - jww
@jww:info reg vec会转储全宽寄存器,如果它们是ZMM或YMM,则可能会很混乱,但您只需要处理使用XMM低128位的代码。 - Peter Cordes

8

这本 手册 上写道:

(gdb) info all-registers

7

如果您只想打印 xmm 寄存器,可以使用 info registers sse(或缩写 i r sse 或甚至 i r s)。

类似地,如果您只想打印 fpu 寄存器,则可以使用 info registers float(或 i r f)。

(在上述命令中,ssefloat寄存器组,您可以使用 maintenance print reggroups 列出它们。)


1
“info reg vec” 在支持的系统上会显示它们的完整宽度,例如 YMM 或 ZMM。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接