找到我的segfault发生在libc中的位置

时间:2013-12-19 10:35:02

标签: c segmentation-fault libc

我的C程序在CentOS 5.7上崩溃,并带有以下日志:

kernel: [1030648.130682] myapp[16454]: segfault at 0 ip b765f683 sp bfc3fa0c error 4 in libc-2.5.so[b75ee000+157000]

似乎对libc的调用导致了段错误。我怎么知道libc中的哪个函数发生了段错误?

这是一个prod环境,没有留下coredump文件;它很少再现。所以,我现在可以做的是分析libc中的哪个函数(由我的程序调用)导致这个段错误,然后我可以检查我的代码。

如果有指针解释这些数字意味着什么,那就太棒了:ip b765f683,sp bfc3fa0c,错误4,b75ee000 + 157000。我用谷歌搜索,但没有找到好的参考。

感谢。

2 个答案:

答案 0 :(得分:0)

通常,分段错误表示您的应用程序正在尝试访问某些未经授权/未加入内存的区域。使用-g开关编译代码,然后使用等内存调试器运行生成的二进制文件,并检查valgrind的输出是什么。大多数情况下,你会得到导致错误的错误电话。

答案 1 :(得分:0)

使用-ggdb开关(使用gcc)进行编译,然后使用gdb找出崩溃的来源......这个tutorial非常有帮助。