问题描述
我在做什么:我正在用 C 编写一个程序,该程序对汇编程序进行外部调用。我使用 SSE 指令,最初只想使用 xmm 寄存器。为了有效地调试程序,我必须密切关注浮点计算,而我在 gdb 中遇到了问题。
我的设置是什么: 在 gdb 中为程序集调用设置断点后,我运行程序。在 gdb 中,我启动 tui 并按如下方式设置布局:
layout regs
focus regs
tui reg all
这允许我跟踪所有寄存器和汇编代码。
我的问题是什么:
-
关于ymm寄存器的信息在屏幕的末尾被截断: 我无法查看全部信息。我已经搜索了文档,但没有找到任何指示 gdb 在一定数量的字符后在寄存器组窗口中换行的指令。有没有办法强制换行?
-
在这个特定的程序中,我将一个
float
值-0.2
传递给汇编函数。根据调用约定,该值应存储在 xmm0 中。使用p $xmm0
和p $ymm0
,我可以在命令行中查看这些寄存器: 在这一点上,我希望在 xmm0 寄存器的最低部分看到-0.2
,但实际上打印时好像它在寄存器的最高部分。为什么会这样? -
正如您在这两张图片中看到的,注册窗口显示我的 ymm0 注册是空的,但是用
p $ymm0
打印它显示它有 {{1 }} 在它的一部分。为什么这些显示的值不同?
结果:我无法调试浮点计算。您对如何配置 gdb 以跟踪这些计算有什么建议吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)