核心文件的gdb backtrace打印错误“没有这样的文件或目录”

时间:2017-04-04 02:32:00

标签: c linux debugging

在测试程序时,我遇到了一个分段故障,它丢弃了所需的核心。

我正在使用gdb调试核心文件: gdb / path / to / exec path / to / core

在查看核心文件(和源代码)之后,我意识到问题实际上是在使用“strcmp”函数时发生的NULL指针取消引用。

但是,核心文件回溯提供了以下错误消息:

程序终止,信号SIGSEGV,Segmentation fault。

#0 __strcmp_sse2_unaligned()at ../ sysdeps / x86_64 / multiarch / strcmp-sse2-unaligned.S:32

32 ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:没有这样的文件或目录。

(gdb)bt

#0 __strcmp_sse2_unaligned()at ../ sysdeps / x86_64 / multiarch / strcmp-sse2-unaligned.S:32

在main.c中的

#1 0x00000000004041f1(argc = 1,argv = 0x7ffced1f8ae8):1144

现在这是一个我无法理解的奇怪信息。我不确定为什么gdb正在打印此消息“../ sysdeps / x86_64 / multiarch / strcmp-sse2-unaligned.S:没有这样的文件或目录”

我应该得到一些与NULL指针去引用有关的消息,但是得到了这个。那是什么意思?

1 个答案:

答案 0 :(得分:1)

这个错误看起来很神秘,但它是正确的。它显示strcmp正在进行空指针去引用,这是从代码的第1144行调用的。

分段错误是指尝试访问无效的内存页面:其段在MMU中被映射为无效以进行读取或写入。在这种情况下,strcmp正在尝试访问第0页,因为您传递了一个NULL ptr。 Null Ptr为地址零,页面0为无效页面。

对文件的引用:

../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S

指的是在64位体系结构上为x86实现strcmp的汇编程序文件(.S)。由于您的系统上没有该实现文件,因此gdb抱怨它无法访问它。