2011-12-28 31 views
-3

我想要編譯使用gcc C文件,我的問題是:是否有可能,當我們在我們的代碼中的錯誤(例如,忘記一個分號)gcc的向我們展示了包含源代碼錯誤(s)?調試用gcc

由於

+1

可以,如果你有一個語法錯誤,你的代碼不會編譯(如果你嘗試過,你會發現這個!)。當然,有很多方法可以產生不會導致語法錯誤的錯誤。 – 2011-12-28 22:38:00

+0

我如何解釋你的問題:你想編譯一個有可能錯誤的C程序。爲什麼不編譯它,看看會發生什麼?編輯:只是讓你知道,gcc給出錯誤所在的行。 – itdoesntwork 2011-12-28 22:39:18

+0

我解釋的問題不同@itdoesntwork ......隨着越來越多的,「我可以看到有問題的代碼......」 – BRFennPocock 2011-12-28 22:40:39

回答

1

gcc將打印出的(近似)線和位置發生錯誤的位置,並在其中的文件。

但是,沒有,gcc不重複的代碼;您必須打開該文件,然後轉到該行。

通常情況下,你的集成開發環境,但是,將讓你點擊在gcc輸出錯誤引用,並直接帶您到該行。 (至少)Eclipse,Anjuta和Emacs都是如此。

(並始終使用-Wextra

+0

+1'-Wextra'。但是如果你正在處理遺留代碼,你可能需要通過'-Wno-sign-compare'來壓制一些警告。另外,添加'-Wshadow'已經讓我擺脫了許多愚蠢的錯誤。 – 2011-12-29 02:09:46

2

gcc診斷的格式是一個線路號和一個診斷消息。不顯示有問題的代碼。

如果你想要更多的表現診斷,你可以嘗試clang編譯器。的clang診斷格式是行號,列數,所述診斷消息,並且以某些標記違規代碼的糊以示出其中的問題是。

例如,給定此代碼與printf語句後丟失分號:

#include <stdio.h> 

int main(void) 
{ 
    int a = 42; 

    printf("%d\n", a) 

    return 0; 
} 

這裏是診斷消息的gccclang之間的差:

$ gcc -Wall tst.c 
tst.c: In function ‘main’: 
tst.c:9: error: expected ‘;’ before ‘return’ 
$ clang -Wall tst.c 
tst.c:7:22: error: expected ';' after expression 
    printf("%d\n", a) 
        ^
        ; 
1 diagnostic generated. 
$