需要用GDB调试共享库的帮助。
我正在尝试调试共享库,就我而言,是:
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/anturnize_va_space
为了能够在GDB下加载它。
到目前为止,我已经确定segfault总是从已加载的共享库的相同偏移量出现。
我通过在Python中进行指令指针减去负载地址来计算偏移:
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_consolidetrid
/build/glibc-9tt8do/glibc-2.23/malloc/malloc.c:4167
自从我运行Ubuntu 16.04以来,我通过发行安装了来源:
$ apt-get源glibc-source
检查有问题的线表明这只是评论。
malloc.c:4167
/* Slightly streamlined version of consolidation code in free() */
内部功能:
static void malloc_consolidate(mstate av)
所以我假设我在这里做错了。
关于如何捕获此" segfault"的任何指针?
所以我假设我在这里做错了。
你不是。
您要查看的症状是堆损坏的99.999%,并且由于compiz
发生这种情况,除了文件错误报告以外,您几乎无法执行。
要制作有用的错误报告,如果您可以在Valgrind下运行compiz
,这将有所帮助。在GDB下运行它 not help。
我在第4167行上加载了库和断点,但是即使我在DMESG中有一个新条目。
。
这意味着您正在调试错误的过程。也许compiz
分叉辅助过程,其中一个死亡?