2017-06-06 65 views
0

需要幫助使用gdb調試共享庫。需要幫助解決libc-2.23.so中的段錯誤

我嘗試調試共享庫,並在我的情況是:
libc-2.23.so

的原因是,我得到的dmesg theese線:

[10081.433266] compiz[11346]: segfault at 7f30a4100010 ip 00007f309c36f44b sp 00007ffdde303aa0 error 4 in libc-2.23.so[7f309c2f1000+1bf000] 
[22005.764635] compiz[16149]: segfault at 7f30e3456db0 ip 00007f30db85044b sp 00007fffaab9c0a0 error 4 in libc-2.23.so[7f30db7d2000+1bf000] 
[48777.031064] compiz[25203]: segfault at 7f0b8e23b050 ip 00007f0b87edf44b sp 00007ffd51d15740 error 4 in libc-2.23.so[7f0b87e61000+1bf000] 
[78850.413793] compiz[4889]: segfault at 7f60ddbf2440 ip 00007f60d598944b sp 00007ffedc5e31b0 error 4 in libc-2.23.so[7f60d590b000+1bf000] 
[84583.754783] compiz[8441]: segfault at 7f5f8c3930c0 ip 00007f5f871d544b sp 00007ffc436bb5a0 error 4 in libc-2.23.so[7f5f87157000+1bf000] 
[100625.457854] compiz[15619]: segfault at 7ffffa967680 ip 00007ffff722844b sp 00007fffffffdad0 error 4 in libc-2.23.so[7ffff71aa000+1bf000] 
[104234.596331] compiz[19076]: segfault at 7ffffa2dc540 ip 00007ffff722844b sp 00007fffffffd810 error 4 in libc-2.23.so[7ffff71aa000+1bf000] 
[112314.238115] compiz[22152]: segfault at 7ffffe232760 ip 00007ffff722844b sp 00007fffffffd810 error 4 in libc-2.23.so[7ffff71aa000+1bf000] 
[130828.195732] compiz[26013]: segfault at 7ffffa966180 ip 00007ffff722844b sp 00007fffffffdad0 error 4 in libc-2.23.so[7ffff71aa000+1bf000] 
[225379.026592] compiz[19275]: segfault at 7ffff821b6d0 ip 00007ffff722844b sp 00007fffffffd7c0 error 4 in libc-2.23.so[7ffff71aa000+1bf000] 

加載libc-2.23.so的地址在時間戳100625.457854之後沒有變化,因爲我運行了命令:

$ echo 0 | sudo tee/proc/sys/kernel/randomize_va_space

爲了能夠在gdb下加載它。

我到目前爲止所做的事情是,我已經確定segfault總是發生在與共享的librarys加載地址相同的偏移量上。

ld = ["7f309c2f1000", "7f30db7d2000", "7f0b87e61000", "7f60d590b000", "7f5f87157000", "7ffff71aa000"] 
ip = ["7f309c36f44b", "7f30db85044b", "7f0b87edf44b", "7f60d598944b", "7f5f871d544b", "7ffff722844b"] 
ld_val = [int(x,16) for x in ld] 
ip_val=[int(x,16) for x in ip] 
ip_off=[i-s for (i,s) in zip(ip_val,ld_val)] 
ip_off 
[517195, 517195, 517195, 517195, 517195, 517195] 

所以使用該信息給我的那一行從執行:

$ addr2line -e/lib中/ x86_64-
我算過了,採取指令指針減負荷地址偏移蟒Linux的GNU/libc-2.23.so -fCi 0x7e44b
malloc_consolidate
/build/glibc-9tT8Do/glibc-2.23/malloc/malloc.c:4167

因爲我跑的Ubuntu 16.04我發出安裝來源:

$ apt-get的源glibc的源

檢查有問題的行表明,它只是一個評論。
malloc.c:4167

/* Slightly streamlined version of consolidation code in free() */ 

內部功能:

static void malloc_consolidate(mstate av) 

所以我假設我錯在這裏做一些事情。
關於如何捕獲此「segfault」的任何指針?

+0

我希望看到的是在執行catch catch(catch the exception)和backtrace(顯示調用堆棧)之後的輸出。這會給我們一些問題來自哪裏,因爲它更可能在你自己的代碼中,而不是'glibc'中。 –

+0

感謝您的回答,但* compiz *不是我的代碼,即使它是我仍然需要知道在哪裏把** catch throw **代碼。 – IgorLopez

+0

在執行程序之前,這兩個命令都用於'gdb';如果問題出現在compiz中,請向維護人員報告錯誤。順便說一句,[這可能是一個需要調查的領域](https://askubuntu.com/q/688959/189361)。 –

回答

1

所以我假設我在這裏做錯了什麼。

你不是。

您正在查看的症狀是堆損壞的99.999%結果,並且由於這發生在compiz中,除了提交錯誤報告外,您幾乎無法做到。

要創建一個有用的錯誤報告,這將有助於您在Valgrind下運行compiz。在GDB下運行它會得到不是的幫助。

我有gdb加載庫和4167行斷點,但沒有休息,即使我有一個新的條目在dmesg。

這意味着你正在調試錯誤的過程。也許compiz叉助手進程,其中一個死亡?