在测试一个程序时,我遇到了一个分段错误,它丢弃了所需的内核。
我使用gdb调试核心文件如下:
gdb/path/to/exec path/to/core
在查看了核心文件(和源代码)之后,我意识到问题实际上是在使用“strcmp”函数时发生的空指针取消引用。
但是,核心文件回溯会给出以下错误消息:
程序终止信号为SIGSEGV,分段故障。
#在../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:32处,0_ustrcmp_usse2_u未对齐
32../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:没有这样的文件或目录。
(gdb)英国电信
#在../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:32处,0_ustrcmp_usse2_u未对齐
#1 0x0000000000441F1位于main(argc=1,argv=0x7ffced1f8ae8),位于main.c:1144
现在这是一个我无法理解的奇怪信息。我不知道gdb为什么要打印这个消息“./sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:没有这样的文件或目录”。
我应该会得到一些与空指针反引用相关的消息,但却得到了这个。那是什么意思?

最佳答案

这个错误看起来令人费解,但它是正确的。它表明strcmp正在进行空指针反引用,这是从代码的第1144行调用的。
分段错误是指试图访问无效的内存页:它的段被映射为在MMU中读或写无效。在本例中,strcmp试图访问页0,因为您传递了一个空ptr。空Ptr是地址零,页0是无效页。
对文件的引用:

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

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

关于c - 核心文件的gdb backtrace打印错误“没有这样的文件或目录”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43197311/

10-09 07:34
查看更多