如何从GDB解释此错误?

时间:2014-11-26 03:12:48

标签: 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

导致段错误的文件丢失了什么?是clearerr.c还是更清晰者试图访问的文件?

2 个答案:

答案 0 :(得分:1)

  

缺少导致段错误的文件?

我们不知道导致SIGSEGV的原因,但任何丢失的文件都不太可能与它有任何关系。

首先,这个:

clearerr.c: No such file or directory.

只是意味着GDB无法向您显示发生SIGSEGV的来源。这是因为clearerr()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

当然还有许多其他方式。您需要查看clearerr调用者以查看它是否正在做一些愚蠢的事情。要查找调用者,请使用GDB where命令。

答案 1 :(得分:-2)

seg fault是由clearerr.c尝试访问的文件引起的(在第27行)。