2017-04-13 56 views
0

我正在使用gdb來調試間歇性崩潰。我可以打開核心轉儲,並查看崩潰發生在共享庫中。 (我可以在回溯中看到函數名稱和庫的文件名,但我沒有該庫的源代碼。)反彙編共享庫 - 顯示哪個版本?

同時,庫已更新,因此文件名現在成立與生成核心轉儲時加載的不同版本的庫。

我可以運行disassemble來查看發生崩潰的函數的機器代碼 - 但是當崩潰發生時我會看到正在使用的版本的代碼,或者gdb會從磁盤上的庫文件加載代碼,從而選擇不匹配的版本?

回答

1

我會在發生崩潰時看到正在使用的版本的代碼,或者gdb會從磁盤上的庫文件加載代碼,從而選擇不匹配的版本?

後者(不匹配版本)。

默認情況下,可執行文件(和其他只讀映射)是保存在core以節省空間 - 內容磁盤上已經可用。

在Linux上,你可以問你的系統,以節省只讀映射有:

echo 0x7 > /proc/self/coredump_filter 

man 5 core