簡體   English   中英

使用 GDB 在 Eclipse 中調試 C 程序時的奇怪行為

[英]Weird behaviour when debugging C programs in Eclipse using GDB

我試圖使用 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()語句的執行被延遲了:雖然我已經點擊了“step over”,但控制台中沒有任何顯示。 為了使這個問題更明顯,讓我們將代碼更改為:

#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", &length); . 但是,如果我每次調用printf()時在末尾添加一個新行字符 '\\n' ,那么就不會有問題並且字符串將立即打印到控制台。

我知道這兩個問題是微不足道的,但作為強迫症我真的很想知道這里發生了什么。 我猜這與 Eclipse 如何處理輸入和輸出有關? 但話又說回來,在 Eclipse 中調試 Java 程序時,我沒有看到這些問題。

附注。 我在 Mac OS X El Capitan、C/C++ 開發人員的 Eclipse (Mars) IDE 上運行,我根據此處給出的說明安裝了帶有 Homebrew 的 GDB: http : //ntraft.com/installing-gdb-on-os- x-小牛/

預先感謝您的回答。

輸出正在緩沖。 換行符刷新緩沖區並在屏幕上顯示結果。 這就是為什么添加\\n時沒有問題的原因。

或者,您可以嘗試添加fflush(stdout); 在您的 printf 語句之后。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM