2012-06-21 66 views
1

我在GDB下调试优化的Linux可执行文件。我们的程序因分段错误而崩溃。然而,错误指令似乎并未实际访问无效指针;它基本上是一个mov 0xf00(%ebx), eax op,其中0xf00(%ebx)是有效内存。至少,它出现在我们x其地址。GDB命令打印分段错误的完整异常信息?

什么是GDB命令来查看在当前捕获的异常所有详细信息,包括确切的内存地址,该断层码试图访问?此信息应该在异常陷阱框架中,但我不知道如何通过GDB获取。

这是针对Ubuntu下的x86。

+0

碰撞本身原来是一个错位的SIMD读取;该地址是有效的但没有对齐。 – Crashworks

回答

1

但是,错误指令似乎并未实际访问无效指针;它基本上是一个mov 0xf00(%ebx),eax op其中0xf00(%ebx)是有效内存。至少,它出现在我们x地址的时候。

我猜测这个地址实际上是无效的(mmapPROT_NONE编辑)。

GDB可以检查它的原因是,在Linux上,ptrace(GDB用来访问低级内存)将很高兴地从这些地址读取,而应用程序本身不能。

什么是GDB命令来查看当前捕获异常的所有细节

尝试print $_siginfo当GDB与信号停止。文档here

相关问题