【问题标题】:Weird behaviour when debugging C programs in Eclipse using GDB使用 GDB 在 Eclipse 中调试 C 程序时的奇怪行为
【发布时间】:2016-07-06 23:34:17
【问题描述】:

我尝试使用 Eclipse IDE 和 GDB 调试器调试需要用户输入的 C 程序。每次我在控制台中输入用户输入时,我的输入都会显示两次。换句话说,我的输入与相同的值相呼应。例如,如果我调试以下 C 程序:

#include <stdio.h>

int main(void) {
    int length, width, height;

    printf("Enter length: ");
    scanf("%d", &length);
    printf("Enter width: ");
    scanf("%d", &width);
    printf("Enter height: ");
    scanf("%d", &height);
    printf("Volume = %d\n", length*width*height);

    return 0;
}

,那么控制台将如下所示:

Enter length: 2
2
Enter width: 3
3
Enter height: 4
4
Volume = 24

.

如您所见,值 2、3 和 4 分别显示了两次。运行这个程序(而不是调试)会得到预期的结果:

Enter length: 2
Enter width: 3
Enter height: 4
Volume = 24

另外,我注意到printf() 语句的执行有延迟:虽然我已经点击了“跳过”,但控制台中没有任何显示。为了让这个问题更明显,让我们将代码更改为:

#include <stdio.h>

int main(void) {
    int length, width, height;

    printf("Enter length: ");
    printf("Enter length: "); // newly added line
    printf("Enter length: "); // newly added line
    scanf("%d", &length);
    printf("Enter width: ");
    scanf("%d", &width);
    printf("Enter height: ");
    scanf("%d", &height);
    printf("Volume = %d\n", length*width*height);

    return 0;
}

在这种情况下,字符串“输入长度:输入长度:输入长度:”将在我跨过第 9 行后一次性显示:scanf("%d", &amp;length);。但是,如果我每次调用printf()时在末尾添加一个换行符'\n',那么就没有问题,字符串会立即打印到控制台。

我知道这两个问题是微不足道的,但作为强迫症,我真的很想知道这里发生了什么。我想这与 Eclipse 如何处理输入和输出有关?但话又说回来,我在 Eclipse 中调试 java 程序时没有看到这些问题。

PS。我在 Mac OS X El Capitan、面向 C/C++ 开发人员的 Eclipse (Mars) IDE 上运行,并根据此处给出的说明安装了带有 Homebrew 的 GDB:http://ntraft.com/installing-gdb-on-os-x-mavericks/

提前感谢您的回答。

【问题讨论】:

  • 尝试更好的 IDE:JetBrains 的 CLion。我不明白为什么有人使用 Eclipse。
  • @duffymo:因为它是免费的? :) 我使用 Eclipse for java,所以我尝试了他们的 C/C++ 版本。我实际上使用 C/C++ 的 Sublime Text 之类的文本编辑器..
  • 这是我使用它的唯一原因。很高兴我学到了更好的东西。
  • 如果你在mac上,你不能使用x-code吗?否则,请查看 Qt creator。
  • 在运行配置窗口中,是否有一个标记为将进程输入和输出连接到终端的复选框?检查了吗?

标签: c eclipse debugging gdb


【解决方案1】:

正在缓冲输出。换行符刷新缓冲区并在屏幕上显示结果。这就是为什么您在添加 \n 时没有遇到问题的原因。

或者,您可以尝试在 printf 语句后添加 fflush(stdout);

另外,我还建议您使用 Xcode for Mac 而不是 Eclipse。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-19
    • 2017-04-11
    • 2017-06-27
    • 2016-07-14
    • 1970-01-01
    • 2012-08-18
    • 2013-09-29
    • 1970-01-01
    相关资源
    最近更新 更多