我正在尝试使用某些内联SSE2程序集解决总线错误。源代码有一个使用5个指针的宏,我怀疑其中一个没有对齐。
我在源代码行上设置了一个断点。但是当我执行disass
时,它会从函数的顶部进行反汇编,而不是调试器停止的位置。有数百行装配,所以它对我没有多大帮助。按 ENTER 30至40次以响应“按ENTER继续”,很快就老了。
我尝试了disass $pc
,但它从函数的顶部进行了组装。我还尝试了disass .
(点的意思是“这里”),但结果是:
A syntax error in expression, near `.'.
GDB用什么来表示“这里”?
答案 0 :(得分:0)
使用$pc
表示当前位置是正确的。当与disassemble
命令一起使用时,这没有达到预期效果的原因是disassemble
命令默认尝试反汇编包含您所看到的给定地址的函数。
可以提供反汇编的替代表单,例如start,end
其中start
和end
是地址,或start,+length
其中start
是地址和length
是一个字节数。
在gdb提示符下尝试help disassemble
以获取更多信息。
作为替代方案,您还可以使用x
(检查)命令显示指令,而智能找不到函数行为的开头,因此x/10i $pc
将显示从{{1开始的10条指令}}。如果您只想反汇编指令,这可能会有所帮助,但是您无法访问$pc
命令上提供的/m
或/r
修饰符。这些修饰符显示交错的源和汇编程序(用于disassemble
)或原始指令字节(用于/m
)。
另外,如果整个按ENTER继续事情变老,那么你可以尝试/r
关闭寻呼机,确保你的终端有足够的滚动回来:)