2015-09-24 59 views
0

我想解决一些内联SSE2程序集的总线错误。源代码有一个使用5个指针的宏,我怀疑其中一个没有对齐。GDB的“这里”是什么?

我在源代码行设置了一个断点。但是当我执行disass时,它会从函数的顶部反汇编,而不是调试器停止的地方。有数百条装配线,所以它对我没有什么帮助。按ENTER响应“按ENTER键继续”的响应时间为30到40次,响应速度很快。

我尝试了一个disass $pc,但是它从函数的顶部进行了dsassembled。我也尝试了disass .(用点意思是“在这里”),但导致:

A syntax error in expression, near `.'. 

是什么GDB用来表示“这里”?

回答

0

您正确使用$pc来表示当前位置。这与disassemble命令一起使用时没有达到预期效果的原因是,disassemble命令默认情况下会尝试反汇编包含您所看到的给定地址的函数。

存在可以给予拆卸,例如start,end其中startend是地址或start,+length其中start是地址length是字节数替代形式。

在gdb提示符处尝试help disassemble以获取更多信息。

作为替代方案,你也可以使用x(检查)命令显示的指令,而智能查找功能行为的开始,所以x/10i $pc将显示10个指令从$pc开始。如果您只希望将指令反汇编,但是您无权访问disassemble命令中提供的/m/r修饰符,这可能会有所帮助。这些修饰符显示交错源和汇编器(对于/m)或原始指令字节(对于/r)。

而且,如果全按回车键继续件事是年纪大了,那么你可以尝试set height 0关掉传呼机,一定要确保你有足够的回卷在终端虽然:)

+0

感谢安德鲁。是的,我也阅读了手册页。但问题是,*“GDB用什么来表示”这里“?”*如果GDB没有“这里”(比如说,WindDBG)的概念,那么说明它并告诉我它不可能在调试器停止的地方。 – jww

+0

好的,我已经将答案扩展到了解决您的问题。 – Andrew