最常見的調試技術之一,使用“printf”進行調試特別受歡迎,因為大多數人在編寫第一個程式時直觀地學習它。
「printf」除錯非常容易進行,因為您不需要任何特殊工具。當您遇到第一個錯誤時,甚至在您知道什麼是偵錯器之前,自然要做的就是讓您的程式逐步列印變量,以便您可以追蹤控制台中的執行。
雖然它是最基本的調試技術之一,但它也被經驗豐富的開發人員廣泛使用。它可以幫助您調查任何類型的問題,例如次優例程、不一致的狀態、多執行緒問題等等。
正如我已經提到的,這種技術不需要您使用任何特殊工具,例如 IDE。然而,如果您正在使用它,它可以讓您更有效地記錄程式狀態。
注意:本文展示了 IntelliJ IDEA 的功能。其他 IDE 中可能有也可能沒有類似的功能。如果您使用其他工具,請考慮檢查其文件以查看這些功能是否也存在。
IntelliJ IDEA 為最常見的偵錯日誌記錄模式提供即時範本。若要使用即時範本進行偵錯日誌記錄,請輸入對應的縮寫並按 Tab 鍵。 IntelliJ IDEA 將產生列印語句並將其插入遊標中。
讓我們來看幾個例子。
public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) { // escriba 'soutp' aquí, luego presione Tab return null; }
產生的程式碼:
public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) { System.out.println("in = " + in + ", mask = " + mask + ", newColor = " + newColor); return null; }
public static double coolMethod(double parameter) { double a = Math.random(); double b = Math.random(); // escriba 'soutv' aquí, presione Tab y luego seleccione el valor return a * b * parameter; }
產生的程式碼:
public static double coolMethod(double parameter) { double a = Math.random(); double b = Math.random(); System.out.println("b = " + b); return a * b * parameter; }
public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) { // escriba 'soutm' aquí return null; }
產生的程式碼:
public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) { System.out.println("ImageUtils.recolor"); return null; }
使用列印語句進行偵錯的缺點之一是它們引入了手動管理的開銷。您無法快速打開和關閉它們,並且您絕對不想在生產中犯下運輸和運行它們的錯誤。
因此,如果您需要記錄某些內容以進行偵錯,我建議使用記錄斷點,因為它們更容易處理。
要設定記錄斷點,請按住 Shift,然後按一下頁邊距。與常規斷點不同,它不會暫停程式執行,而是列印到控制台。
預設情況下,這是一條訊息,表示程式已到達此行。如果您希望記錄目前堆疊追蹤或自訂表達式的結果,也可以使用斷點設定中評估並記錄複選框附近的選項。
注意:小心註冊表達式。評估那些導致副作用的因素可能會成為新錯誤或意外行為的來源。此外,當在熱代碼中使用時,它們可能會顯著減慢您的程式速度。
當日誌斷點變得很多時,您可以在斷點對話框中追蹤和管理它們(運行 | 查看斷點):
您甚至可以為他們建立自訂群組:
這將有助於您集中管理斷點。例如,您可以建立與特定錯誤相關的群組並將其儲存以供以後使用。當問題消失後,您只需將其關閉即可。這樣,如果問題再次出現,您不必從頭開始重新建立所有內容。您只需重新開啟群組即可。
對於程式執行期間大量發生的事件,單獨記錄每個事件可能是多餘的。這不僅會導致控制台充斥著訊息,而且大量的 I/O 互動也會顯著減慢調試會話的速度。
對於這些事件,使用透過計數 函數可能會很有用。您可以在斷點對話框中存取它。
將傳遞計數設定為特定值後,只有在每次到達n次時才會觸發對應的斷點,確保日誌記錄不會成為麻煩。
無論您是插入列印語句還是設定日誌斷點進行調試,現代工具都具有改善調試體驗的功能。透過這篇文章,我想確保您了解這些讓整個過程更加愉快的小技巧。
如果您對更多與調試和分析相關的文章感興趣,請查看我的其他一些文章:
以上是改進了printf調試的詳細內容。更多資訊請關注PHP中文網其他相關文章!