2012-06-21 67 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

相關問題