首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助解决libc-2.23.so中的分段故障

需要帮助解决libc-2.23.so中的分段故障
EN

Stack Overflow用户
提问于 2017-06-06 08:11:55
回答 1查看 10.3K关注 0票数 6

需要使用gdb调试共享库的帮助。

我试图调试一个共享库,在我的例子中,它是:

libc-2.23.so

原因是我在dmesg中得到了这些行:

代码语言:javascript
复制
[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 /proc/sys/核/随机化_va_space

以便能够在gdb下加载它。

到目前为止,我所做的是确定分段错误总是发生在与共享库加载地址相同的偏移量上。

我通过在python中接受指令指针减去加载地址来计算偏移量:

代码语言:javascript
复制
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-source

检查这条违规的线路表明,这只是一种评论。

malloc.c:4167

免费() */ /*略有简化的合并代码版本

内部功能:

代码语言:javascript
复制
static void malloc_consolidate(mstate av)

所以我假设我在这里做错了什么。

有关于如何捕捉这个“分段错误”的指针吗?

EN

回答 1

Stack Overflow用户

发布于 2017-06-22 06:51:28

所以我假设我在这里做错了什么。

你才不是呢。

您正在查看的症状是堆损坏的99.999%的结果,而且由于这发生在compiz中,除了提交错误报告之外,您几乎没有什么可以做的。

要编写一个有用的bug报告,如果您可以在Val差尔下运行compiz,这将有所帮助。在GDB下运行它不会有帮助。

我在第4167行加载了gdb库和断点,但是即使在dmesg中有一个新条目,也没有中断。

这意味着您正在调试错误的进程。也许compiz会分叉帮助进程,其中一个会死掉?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44384685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档