在 libc 中找到我的段错误发生的位置

Wan*_*uma 5 c libc segmentation-fault

我的 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]
Run Code Online (Sandbox Code Playgroud)

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

这是一个生产环境,没有留下任何核心转储文件;而且很少繁殖。所以,我现在能做的就是分析libc中的哪个函数(由我的程序调用)导致了这个segfault,然后我可以检查我的代码。

如果有指针可以解释这些数字的含义,那就太好了:ip b765f683, sp bfc3fa0c, error 4, b75ee000+157000。我用谷歌搜索但没有找到好的参考资料。

谢谢。

Sou*_*osh 0

通常,分段错误表明您的应用程序正在尝试访问某些未经授权/意外的内存区域。使用 switch编译代码,然后使用-g等内存调试器运行生成的二进制文件,并检查valgrind的输出是什么。大多数时候,您会收到导致错误的错误调用。