next up previous contents
Next: 程式可讀性 Up: 基本概念 Previous: 基本語法   Contents

除錯

  1. 除錯 (debug):發現程式錯誤並加以修正。
  2. 語法錯誤:程式碼的語法不符合 C 語言的規定,以下 hello.c 例子:
    [dywang@dyw219 zzz]$ vim hello.c
    [dywang@dyw219 zzz]$ cat hello.c
    #include <stdio.h>
    main() {
    	printf("Hello!\n");
    )
    
  3. gcc 編譯 hello.c 出現錯誤:第 4 行的小括號 ) 前面,應該要有對應的 (
    [dywang@dyw219 zzz]$ gcc hello.c 
    hello.c: In function ‘main’:
    hello.c:4:1: error: expected statement before ‘)’ token
     )
     ^
    hello.c:4:1: error: expected declaration or statement at end of input
    
  4. 修正錯誤
    [dywang@dyw219 zzz]$ vim hello.c
    [dywang@dyw219 zzz]$ cat hello.c
    #include <stdio.h>
    main() {
    	printf("Hello!\n");
    }
    
  5. 再編譯,已無錯誤。
    [dywang@dyw219 zzz]$ gcc hello.c 
    [dywang@dyw219 zzz]$
    
  6. 語意錯誤:當程式語法正確,但執行結果不符合設計要求,如下 debug1.c 程式:
    [dywang@dyw219 zzz]$ vim debug1.c
    [dywang@dyw219 zzz]$ cat debug1.c
    #include <stdio.h>
    main() {
    	int a=1, b=2, c;
    	c = a-b;
    	printf("1 + 2 = %d\n", c);
    }
    
  7. gcc 編譯 debug1.c 成功,產生 debug1 可執行檔。
    [dywang@dyw219 zzz]$ gcc -o debug1 debug1.c
    
  8. 執行 debug1 輸出 1 + 2 = -1,與預期結果不同。由於語意錯誤不會造成編譯錯誤,除錯上較困難,程式設計師要設定除錯點逐步檢查程式內容。
    [dywang@dyw219 zzz]$ ./debug1 
    1 + 2 = -1
    



De-Yu Wang 2019-06-27