【问题标题】:Can't find a source file at" /getc.c" eclipse c ubuntu在“/getc.c”eclipse c ubuntu 中找不到源文件
【发布时间】:2019-03-10 19:27:19
【问题描述】:

刚刚在我的 linux 上安装了 eclipse 并尝试使用文件。 我想使用 fgetc 功能,但似乎它不起作用.. 调试时:即使我使用跨过它的粉碎,而让它运行它只是不做任何事情。 它也发生在与 fscanf、fgets 等文件相关的每个函数中。

错误信息是:

Can't find a source file at "/build/glibc-OTsEL5/glibc-2.27/libio/getc.c" Locate the file or edit the source lookup path to include its location.

有什么想法吗?

谢谢你的进步

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
int main(){
    func();
return 0;
}

void func(){
  int ch;
  int fd = open("out.txt", O_RDONLY);
  if(fd < 0)
          perror("fd");
  ch = fgetc(fd);
  printf("%d",ch);
}

【问题讨论】:

  • 不要试图通过库函数进行跟踪。只需使用 trace-over 或者如果您错误地进入它们 finish 命令。无论您您的程序的实际问题是什么,它都在其他地方。
  • 如果我理解正确,所以我真的没有跟踪,我用 step over 而不是 step into 来调试它
  • 如果你正确地跨过它,你就不会看到这个。但即便如此,它也无关。专注于调试意外行为。
  • 坦率地说,您的代码甚至不应该 compile 发出严重警告,因为您混合了文件描述符和 FILE 句柄,以及一些其他问题,例如缺少原型和缺少包含...
  • 其实下次阅读编译器警告。如果您选择忽略它们,则表示您比编译器更了解情况。 有时这可能是真的,但在这种情况下,你显然不知道。

标签: c linux ubuntu gdb fgetc


【解决方案1】:

错误消息来自调试器。这表明为您的系统构建 glibc 的人没有将源文件添加到调试信息中。因此,单步执行fgetc 等系统库函数非常混乱。但这与您的实际问题无关。

您不能将open 等文件描述符函数与fgetc 等文件流函数混合使用。编译器将打印类型不匹配警告;你真的不应该忽视这些。

这样的东西应该可以修复类型错误:

  File *fp = fopen("out.txt", "r");
  if (fp == NULL) {
    perror("fopen");
    return 1;
  }
  ch = fgetc(fp);

如果您想继续使用无缓冲 I/O 和 open,则必须使用 read 函数而不是 fgetc 来读取字节。

【讨论】:

  • 它确实适用于 read 但我不知道为什么.. 非常感谢!!
猜你喜欢
  • 2015-07-20
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2011-09-06
  • 2017-09-04
  • 1970-01-01
相关资源
最近更新 更多