java斷點調試(debug)

在開發中,新手程序員在查找錯誤時,?這時老程序員就會溫馨提示,可以用斷點調試,一步一步的看源碼執行的過程,從而發現錯誤所在。
重要提示: 斷點調試過程是運行狀態,是以對象的運行類型來執行的

斷點調試介紹

????????斷點調試是指在程序的某一行設置一個斷點,調試時,程序運行到這一行就會停住,然后你可以一步一步往下調試,調試過程中可以看各個變量當前的值,出錯的話,調試到出錯的代碼行即顯示錯誤,停下。進行分析從而找到這個Bug斷點調試是程序員必須掌握的技能。斷點調試也能幫助我們查看java底層源代碼的執行過程,提高程序員的Java水平。

基本概念

  • 斷點(Breakpoint):在代碼中設置的特定位置,當程序運行到該位置時,會暫停執行,以便開發者檢查程序的狀態。
  • 調試會話(Debug Session):啟動調試模式后,程序在 IDEA 的控制下運行,開發者可以通過各種調試工具與程序交互,這個過程稱為調試會話。
  • 調試工具窗口:IDEA 提供了專門的調試工具窗口,用于顯示調試相關的信息,如變量的值、調用棧、線程信息等。

操作步驟

  1. 設置斷點:在 IDEA 的代碼編輯器中,單擊要設置斷點的代碼行左側的空白區域,會出現一個紅點,表示斷點已設置。也可以通過右鍵單擊代碼行,選擇 “Toggle Breakpoint” 來設置或取消斷點。

  1. 啟動調試:可以通過以下幾種方式啟動調試會話。
    • 點擊 IDEA 工具欄中的 “Debug” 按鈕,選擇要調試的 Java 類或啟動配置。
    • 使用快捷鍵,如在 Windows/Linux 系統中通常是 “Shift+F9”,在 Mac 系統中是 “Control+Shift+F9”。
    • 在 “Run” 菜單中選擇 “Debug”,然后選擇相應的啟動配置。

  1. 調試工具窗口:啟動調試后,IDEA 會顯示調試工具窗口,主要包括以下幾個部分。
    • Variables(變量):顯示當前作用域內的變量及其值。可以通過雙擊變量來修改其值,方便進行測試和調試。
    • Call Stack(調用棧):顯示方法的調用順序,從當前執行的方法開始,向上追溯到方法的調用源頭。可以點擊調用棧中的方法,查看該方法調用時的上下文信息。
    • Threads(線程):顯示當前正在運行的線程信息,包括線程的名稱、狀態等。可以在多線程程序中,方便地切換到不同的線程進行調試。
  2. 調試操作
    • Step Over(單步跳過):快捷鍵是 “F8”。程序會執行下一行代碼,如果下一行代碼是方法調用,會直接執行完該方法并返回,不會進入方法內部
    • Step Into(單步進入):快捷鍵一般是 “F7”。如果下一行代碼是方法調用,會進入方法內部,繼續單步執行。
    • Force Step Into(強制單步進入):可以強制進入任何方法,包括 Java 核心類庫中的方法,而不僅僅是用戶自定義的方法。
    • Step Out(單步跳出):當進入一個方法內部后,使用 “Step Out”(快捷鍵通常是 “Shift+F8”)可以執行完當前方法,并返回到調用該方法的位置。
    • Resume Program(恢復程序):快捷鍵是 “F9”。程序會從當前斷點繼續執行,直到遇到下一個斷點或程序結束。
    • Evaluate Expression(計算表達式):在調試過程中,可以通過 “Evaluate Expression” 功能計算表達式的值。在 “Variables” 窗口或代碼編輯器中右鍵單擊,選擇 “Evaluate Expression”,輸入要計算的表達式,IDEA 會顯示計算結果。

實際開發斷點技巧

  • 條件斷點:可以為斷點設置條件,只有當條件滿足時,程序才會在該斷點處暫停。在斷點上右鍵單擊,在“Condition”的內容框中設置條件表達式。

例如,我們在這個for循環中斷點,那么每次執行循環都會進入斷點,我們可以通過設置斷點條件來控制是否進入斷點,比如只需要在 i = 10 的時候進入斷點,則可以在斷點處右鍵,在彈出的對話框的 Condition 中輸入條件,如下所示

for (int i = 0; i < 100; i++) {System.out.println(i);
}

  • 異常斷點:IDEA 允許設置異常斷點,當程序拋出特定類型的異常時,會自動暫停在拋出異常的位置。在 “Debug” 窗口中,點擊 “View Breakpoints” 按鈕,選擇 “Java Exception Breakpoints”,可以添加要監控的異常類型。
  • 多線程調試:在多線程程序中,可以通過 “Threads” 窗口方便地切換線程進行調試。還可以使用 “Suspend All” 和 “Suspend Thread” 按鈕來暫停所有線程或單個線程,以便分析線程之間的交互和數據共享問題。

如果我們希望按照 線程1-1,線程2-1,線程1-2,線程2-2,線程1-3,線程2-3 的順序輸出,可以通過設置斷點執行順序來實現,具體操作如下所示。

new Thread(()->{System.out.println("線程1-1");System.out.println("線程1-2");System.out.println("線程1-3");
}).start();new Thread(()->{System.out.println("線程2-1");System.out.println("線程2-2");System.out.println("線程2-3");
}).start();

先在兩個線程代碼中打斷點,然后在斷點處右鍵,設置為 Thread,如下圖所示

然后就可以在frame下切換線程執行了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895792.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895792.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895792.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件技術實訓室解決方案(2025年最新版)

軟件產業作為新興產業的核心組成部分&#xff0c;是推動數字經濟發展的重要力量。在“十四五”規劃的新機遇與挑戰下&#xff0c;我國已明確將加強關鍵數字技術創新應用作為戰略重點&#xff0c;并將軟件和信息技術服務業的發展列為重中之重。這不僅是為了加速構建現代產業體系…

foobar2000設置DSP使用教程及軟件推薦

foobar2000安卓中文版&#xff1a;一款高品質手機音頻播放器 foobar2000安卓中文版是一款備受好評的高品質手機音頻播放器。 幾乎支持所有的音頻格式&#xff0c;包括 MP3、MP4、AAC、CD 音頻等。不論是經典老歌還是最新的流行音樂&#xff0c;foobar2000都能完美播放。除此之…

DeepSeek企業級部署實戰指南:從服務器選型到Dify私有化落地

對于個人開發者或嘗鮮者而言&#xff0c;本地想要部署 DeepSeek 有很多種方案&#xff0c;但是一旦涉及到企業級部署&#xff0c;則步驟將會繁瑣很多。 比如我們的第一步就需要先根據實際業務場景評估出我們到底需要部署什么規格的模型&#xff0c;以及我們所要部署的模型&…

I2C、SPI、UART

I2C&#xff1a;串口通信&#xff0c;同步&#xff0c;半雙工&#xff0c;雙線&#xff08;數據線SDA時鐘線SCL&#xff09;&#xff0c;最大距離1米到幾米 SPI&#xff08;串行外設接口&#xff09;&#xff1a;串口通信&#xff0c;同步&#xff0c;全雙工&#xff0c;四線&…

uniapp 連接mqtt

1&#xff1a;下載插件 npm install mqtt 2&#xff1a;創建 mqtt.js /* main.js 項目主入口注入實例 */ // import mqttTool from ./lib/mqttTool.js // Vue.prototype.$mqttTool mqttTool/* 使用范例見 /pages/index/index.vue */ // mqtt協議&#xff1a;H5使用ws/wss APP-…

shell腳本備份PostgreSQL數據庫和庫下表

注意&#xff1a; 以下為對PostgreSQL13.16版本數據庫備份shell腳本參考請確認備份節點上psql和pgdump的版本不至于太低&#xff0c;建議>13.16該腳本目前是對于整庫、&#xff08;默認針對public這個schema&#xff0c;如果有其他schema&#xff0c;請自行添加一層循環&am…

EXCEL解決IF函數“您已為此函數輸入太多個參數”的報錯

IF函數的基本結構是IF(條件, 值為真時的結果, 值為假時的結果)&#xff0c;所以標準的IF函數最多只能有三個參數。當用戶輸入的參數超過三個時&#xff0c;Excel就會報這個錯誤。比如多個IF語句疊加&#xff0c;但可能在嵌套的過程中沒有正確關閉每個IF函數的括號&#xff0c;導…

圖像質量評價指標-UCIQE-UIQM

一、評價指標UCIQE 在文章《An underwater color image quality evaluation metric》中&#xff0c;提到的了評價指標UCIQE&#xff08;Underwater Colour Image Quality Evaluation&#xff09;&#xff0c;是一種無參考圖像質量評價指標&#xff0c;主要用于評估水下圖像的質…

Vue 前端開發中的路由知識:從入門到精通

文章目錄 引言1. Vue Router 簡介1.1 安裝 Vue Router1.2 配置 Vue Router1.3 在 Vue 實例中使用 Vue Router 2. 路由的基本用法2.1 路由映射2.2 路由視圖2.3 路由鏈接 3. 動態路由3.1 動態路徑參數3.2 訪問動態參數3.3 響應路由參數的變化 4. 嵌套路由4.1 定義嵌套路由4.2 渲染…

基于Springboot+微信小程序調用文心一言大模型實現AI聊天

一、文章前言 此文主要實現基于Springboot微信小程序調用文心一言大模型實現AI聊天對話功能&#xff0c;使用Java作為后端語言進行支持&#xff0c;界面友好&#xff0c;開發簡單。 二、開發流程及工具準備 2.1、登錄百度智能云平臺&#xff0c;獲取 API Key 和 Secret Key兩個…

leaflet前端初始化項目

1、通過npm安裝leaflet包&#xff0c;或者直接在項目中引入leaflet.js庫文件。 npm 安裝&#xff1a;npm i leaflet 如果在index.html中引入leaflet.js,在項目中可以直接使用變量L. 注意:盡量要么使用npm包&#xff0c;要么使用leaflet.js庫&#xff0c;兩者一起使用容易發生…

Deepseek官網接口文檔

API 接口 生成完成 生成聊天完成 創建模型 列出本地模型 顯示模型信息 復制模型 刪除模型 拉取模型 推送模型 生成嵌入 列出運行中的模型 版本 約定 模型名稱 模型名稱遵循 model:tag 格式&#xff0c;其中 model 可以有一個可選的命名空間&#xff0c;例如 ex…

容器運行常見數據庫

一.涉及鏡像壓縮包 均為amd架構版本&#xff1a;mysql:5.7.42、postgres:13.16、dm8:20250206_rev257733_x86_rh6_64、oceanbase-ce:v4.0、opengauss:5.0.2 通過網盤分享的文件&#xff1a;db.tgz 鏈接: https://pan.baidu.com/s/1EBbFPZj1FxCA4_GxjVunWg?pwd563s 提取碼: 5…

python爬蟲系列課程2:如何下載Xpath Helper

python爬蟲系列課程2:如何下載Xpath Helper 一、訪問極簡插件官網二、點擊搜索按鈕三、輸入xpath并點擊搜索四、點擊推薦下載五、將下載下來的文件解壓縮六、打開擴展程序界面七、將xpath.crx文件拖入擴展程序界面一、訪問極簡插件官網 極簡插件官網地址:https://chrome.zzz…

PHP支付寶--轉賬到支付寶賬戶

官方參考文檔&#xff1a; ?https://opendocs.alipay.com/open/62987723_alipay.fund.trans.uni.transfer?sceneca56bca529e64125a2786703c6192d41&pathHash66064890? 可以使用默認應用&#xff0c;也可以自建新應用&#xff0c;此處以默認應用來講解【默認應用默認支持…

前端開發崗模擬面試題套卷A答案及解析(一)技術面部分

前端開發崗模擬面試題套卷A答案及解析(一)技術面部分 (一)技術面 一、JavaScript核心技術(ES6+) 1-1、實現防抖函數 function debounce(fn, delay) {let timer = null;return function(...args) {clearTimeout(timer); // 清除已有定時器timer = setTimeout(() =>…

對稱加密算法——IDEA加密算法

Java IDEA算法詳解 1. 理論背景 IDEA&#xff08;International Data Encryption Algorithm&#xff09;是一種對稱密鑰加密算法&#xff0c;由Xuejia Lai和James Massey于1991年提出。它被設計用于替代DES&#xff08;Data Encryption Standard&#xff09;算法&#xff0c;…

單例模式、構造函數、左值右值

拷貝構造函數 簡單的說就是——用一個對象構造另外一個對象 class Myclass {public:int d0;Myclass(int d_){d d_}; //常用的構造函數Myclass(Myclass c) //拷貝構造函數{d c.d;} }; //對比 class Myclass {public:int d0;Myclass(int d_){d d_}; //常用的構造函數Myclass…

rustdesk遠程桌面自建服務器

首先&#xff0c;我這里用到的是阿里云服務器 centos7版本&#xff0c;win版客戶端。 準備工作 centos7 服務器端文件&#xff1a; https://github.com/rustdesk/rustdesk-server/releases/download/1.1.11-1/rustdesk-server-linux-amd64.zip win版客戶端安裝包&#xff1…

【深度學習】Transformer入門:通俗易懂的介紹

【深度學習】Transformer入門&#xff1a;通俗易懂的介紹 一、引言二、從前的“讀句子”方式三、Transformer的“超級閱讀能力”四、Transformer是怎么做到的&#xff1f;五、Transformer的“多視角”能力六、Transformer的“位置記憶”七、Transformer的“翻譯流程”八、Trans…