Debugging 我如何从GDB解释这个错误?
我现在觉得自己很笨,但是我如何在GDB中解释这个消息呢Debugging 我如何从GDB解释这个错误?,debugging,segmentation-fault,gdb,Debugging,Segmentation Fault,Gdb,我现在觉得自己很笨,但是我如何在GDB中解释这个消息呢 Program received signal SIGSEGV, Segmentation fault. 0x00007fe2eb46073a in clearerr (fp=0x4359790) at clearerr.c:27 27 clearerr.c: No such file or directory. in clearerr.c 导致SEG故障的文件丢失了?是clearerr.c还是clearerr试图访问的文件?s
Program received signal SIGSEGV, Segmentation fault.
0x00007fe2eb46073a in clearerr (fp=0x4359790) at clearerr.c:27
27 clearerr.c: No such file or directory.
in clearerr.c
导致SEG故障的文件丢失了?是clearerr.c还是clearerr试图访问的文件?seg故障是由clearerr.c试图访问的文件引起的(在第27行) 导致SEG故障的文件丢失了 我们不知道是什么导致了SIGSEGV,但不太可能有任何丢失的文件与此有关 首先,这是:
clearerr.c: No such file or directory.
简单地说,GDB不能向您显示发生SIGSEGV
的源代码。这是因为clearr()
是libc
的一部分,并且您没有为libc
安装源代码(它们甚至可能不适用于您的环境),或者您没有告诉GDB如何查找这些源代码
其次,SIGSEGV
的实际原因很可能是因为调用它的fp
已损坏或以其他方式无效
以下是一些可能发生这种情况的方法:
char c;
FILE *fp = (FILE*) &c; // fp is bogus: doesn't point to a FILE at all
clearerr(fp); // likely will crash
FILE *fp2; // fp2 contains uninitialized garbage
clearerr(fp2); // likely will crash
FILE *fp3 = fopen("/tmp/foo", "w");
fclose(fp3); // destroys fp3
clearerr(fp3); // accesses dangling memory, likely will crash
当然还有很多其他的方法。您需要查看clearr
的调用方,看看它是否在做一些愚蠢的事情。要查找调用者,请使用GDBwhere
命令