2011-12-29 407 views
2

我已經編程了大約5個月。我從C++開始,然後是C,最後是Java。在這段時間裏,我從來沒有在編譯器上使用調試功能,也不知道它的功能。在課堂上,迄今爲止我還沒有任何關於調試器的知識(Altho類幾乎不用C開始,我自己學習了C++和Java)。什麼是調試,它有什麼作用,並且你經常使用它?調試有什麼用途?我一直在調試,但我不明白。任何人都可以正確解釋調試功能嗎?從我目前瞭解的情況來看,這是一個可以幫助您查找錯誤的功能,但我不太明白它的工作原理。調試有幫助嗎?

+0

您可以按照您的代碼執行一步一步。這對於查找和排除錯誤很有用。 – Victor 2011-12-29 15:17:11

回答

4

調試本身就是發現和消除錯誤的過程,沒有別的也沒有。所以除非你是一個從不犯錯誤的完美程序員,否則你已經完成了。

A 調試器另一方面,它是一個協助調試的工具。您仍然可以在沒有調試器的情況下進行調試,但是使用調試器可以爲您提供更多選擇以及解決方法。

沒有你提的具體情況,你在說哪個調試有關(Visual Studio的一個,或者GDB,或......),我們真的不能告訴你如何使用它,但是,概括地說:

調試器將允許您一次執行一條指令的代碼,或一次執行一條指令。它會讓你運行你的代碼,直到你感興趣的地方,然後停下來。在代碼停止的情況下,您可以檢查變量的值以確保事情順利進行,並且在某些情況下甚至可以修改運行中的事情以測試各種情況。

一些調試不使用調試器技術:

  • 打印插入,在那裏你垃圾與打印命令代碼,可以讓你追蹤你的代碼的狀態在運行時,
  • 代碼閱讀,你在哪裏閱讀代碼,並試圖找到你的意圖與實際寫的不同的地方
  • 杯子對話,你試圖向你的朋友(或一個杯子,或企鵝娃娃)解釋你的代碼在你的桌子上),並在這個過程中看到你的邏輯出錯
  • 二進制縮短搜索,在那裏你在一個時間刪除您的代碼塊,看看錯誤仍然存​​在

等等。

+0

謝謝。這幾乎總結了我。我之前已經調試過,但沒有該功能本身。 – Bugster 2011-12-29 15:43:33

+2

「杯子對話」我曾經有過這種叫做「專家白癡」技巧的變體。朋友會說,「這在X打擊,我不知道爲什麼。」我會說,「好吧,從頭開始。」我會坐下來強迫他們解釋一切,好像我是一個完全白癡。很多時候,他們會處於中間狀態,停下來,臉紅,並說:「沒關係。」如果他們說:「哦,它永遠不會發生*。」我進入Pit Bull模式並強迫他們捍衛每一個逗號和分號,因爲這個「手搖」幾乎肯定意味着他們沒有真正看過它。 – 2011-12-31 23:52:51

1

調試允許您在代碼執行的每個步驟檢查變量的值。這是找到愚蠢錯誤的好方法(等等)。例如,你可能不抓住這個差一錯誤:

for (int i = 0; i <= 10; i++) 
{ 
    MethodThatShouldExecuteTenTimes(i); 
} 

如果通過與調試代碼步驟,你會看到,該方法被調用11次。

0

如果你編寫的程序總是第一次工作,你將永遠不需要找到錯誤。

如果程序編譯但不起作用,您如何解決出了什麼問題?

添加大量的打印語句的工作,但能夠進入功能,逐步通過他們,並檢查內存存儲真的很有幫助。

人們可以說調試就像暴力 - 無聊的最後一個避難所!

但是有時候,我們沒有足夠的能力來避免這個bug,調試器使得生活SOOOOOO更好。

0

調試是發現沒有做你想做它的代碼的過程。爲了高效完成工作,這是一項非常必要的技能。它可以包含很多東西。包括但不限於:由程序

  • 查看你的程序在網絡
  • 傳輸的消息查看程序的輸出產生

    • 閱讀日誌文件(例如不網頁顯示和正確行事)
    • 查看異常的堆棧跟蹤
    • 使用調試器逐行掃描您的代碼,以便您可以在執行期間的特定點處看到變量的值。

    調試器不僅可以用於定位程序中的錯誤。它可以幫助您理解現有代碼的運作方式。您可以在代碼中設置斷點:一個標記,告訴調試器在該行停止執行。然後從這一點開始,您可以逐行逐句瀏覽源代碼。

    爲了更好地使用調試器,我建議您在代碼中設置一個斷點並逐步完成。然後你會看到我和其他人說的話。您使用的任何開發環境應該有關於如何使用包含的調試器的說明。