」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 改進了&#printf&#調試

改進了&#printf&#調試

發佈於2024-11-03
瀏覽:348

「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;
}

記錄斷點

使用列印語句進行偵錯的缺點之一是它們引入了手動管理的開銷。您無法快速打開和關閉它們,並且您絕對不想在生產中犯下運輸和運行它們的錯誤。

因此,如果您需要記錄某些內容以進行調試,我建議使用記錄斷點,因為它們更容易處理。

Depuración

要設定記錄斷點,請按住 Shift,然後按一下頁邊距。與常規斷點不同,它不會暫停程式執行,而是列印到控制台。

預設情況下,這是一條訊息,表示程式已到達此行。如果您希望記錄目前堆疊追蹤或自訂表達式的結果,也可以使用斷點設定中 Evaluate 和 log 複選框附近的選項。

Depuración

注意:小心記錄表達式。評估那些導致副作用的因素可能會成為新錯誤或意外行為的來源。此外,當在熱代碼中使用時,它們可能會顯著減慢您的程式速度。

當日誌斷點較多時,可以在斷點對話框中追蹤並管理它們(運行 | 查看斷點):

Depuración

您甚至可以為他們建立自訂群組:

Depuración

這將幫助您集中管理斷點。例如,您可以建立與特定錯誤相關的群組並將其儲存以供以後使用。當問題消失後,您只需將其關閉即可。這樣,如果問題再次出現,您不必從頭開始重新建立所有內容。您只需重新開啟該群組即可。

頻繁事件日誌

對於程式執行期間​​大量發生的事件,單獨記錄每個事件可能是多餘的。這不僅會導致控制台充斥著訊息,而且大量的 I/O 互動也會顯著減慢調試會話的速度。

Depuración

對於這些事件,使用通過次數函數可能會很有用。您可以在斷點.

對話方塊中存取它。

Depuración

Pass count設為特定值後,只有每次到達n次時才會觸發對應的斷點,確保日誌記錄不會成為麻煩。

概括

無論您是插入列印語句還是設定日誌斷點進行調試,現代工具都具有改善調試體驗的功能。透過這篇文章,我想確保您了解這些讓整個過程更加愉快的小技巧。

如果您對更多與調試和分析相關的文章感興趣,請查看我的其他一些文章:

  • Debugger.godMode() – 使用偵錯器破解 JVM 應用程式
  • 調試器緩慢問題排查
  • createDirectories() 有什麼問題? - CPU 分析指南
  • 無斷點調試
版本聲明 本文轉載於:https://dev.to/flounder4130/depuracion-printf-mejorada-26l1?1如有侵犯,請聯繫[email protected]刪除
最新教學 更多>
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-05-07
  • Go語言如何動態發現導出包類型?
    Go語言如何動態發現導出包類型?
    與反射軟件包中的有限類型的發現能力相反,本文探索了替代方法,探索了在Runruntime。 go import( “ FMT” “去/進口商” ) func main(){ pkg,err:= incorter.default()。導入(“ time”) 如果er...
    程式設計 發佈於2025-05-07
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 ; $ date->修改('1個月'); //前進1個月 echo $ date->...
    程式設計 發佈於2025-05-07
  • Java為何無法創建泛型數組?
    Java為何無法創建泛型數組?
    通用陣列創建錯誤 arrayList [2]; JAVA報告了“通用數組創建”錯誤。為什麼不允許這樣做? 答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<my...
    程式設計 發佈於2025-05-07
  • 如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    如何從Python中的字符串中刪除表情符號:固定常見錯誤的初學者指南?
    從python import codecs import codecs import codecs 導入 text = codecs.decode('這狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#帶有...
    程式設計 發佈於2025-05-07
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-05-07
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-05-07
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-05-07
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    程式設計 發佈於2025-05-07
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-05-07
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-05-07
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-05-07
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-05-07
  • Java中如何使用觀察者模式實現自定義事件?
    Java中如何使用觀察者模式實現自定義事件?
    在Java 中創建自定義事件的自定義事件在許多編程場景中都是無關緊要的,使組件能夠基於特定的觸發器相互通信。本文旨在解決以下內容:問題語句我們如何在Java中實現自定義事件以促進基於特定事件的對象之間的交互,定義了管理訂閱者的類界面。 以下代碼片段演示瞭如何使用觀察者模式創建自定義事件: args...
    程式設計 發佈於2025-05-07
  • 如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    為有效的slug生成首先,該函數用指定的分隔符替換所有非字母或數字字符。此步驟可確保slug遵守URL慣例。隨後,它採用ICONV函數將文本簡化為us-ascii兼容格式,從而允許更廣泛的字符集合兼容性。 接下來,該函數使用正則表達式刪除了不需要的字符,例如特殊字符和空格。此步驟可確保slug僅包...
    程式設計 發佈於2025-05-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3