最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Intellij IDEA的一些調試技巧(小結)

 更新時間:2017年11月24日 09:47:04   作者:v  
本篇文章主要介紹了Intellij IDEA的一些調試技巧(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

程序員的工作內容,除了大部分時間寫代碼之外,因為有不少的時間是用在調試代碼上。甚至說不是在調試代碼,就是即將調試代碼。 :)

今天我們來談談調試代碼的一些技巧,在使用IDE提供的debugger時一些快速定位問題的方式。

看到這里的朋友,不要馬上認為我標題黨,再往下看看,如果你還有一些更好用的技巧,歡迎留言。

下面進入正題。

1 多線程調試

開發(fā)過多線程應用的朋友應該有體會,有些時候,為了觀察多個線程間變量的不同狀態(tài),以及鎖的獲取等,就會想到在代碼里加個斷點debug一下。

在IDE里斷點停下來的時候,可以切換到另外的線程中,跑其他的代碼,不會互相影響。當然,這里是有個開關的,在Eclipse里默認開啟,

但是在IntelliJ IDEA里默認是沒有開啟的。也就是說如果你在IDEA里代碼里加斷點,雖然一個線程的斷了下來,但其他線程的已經執(zhí)行過了。

此處把線程的suspend設置成和Eclipse模式一樣之后,也可以開始多線程應用的調試。

簡單設置可以直接在斷點處,將suspend改成Thread

更改IDEA中的默認設置:切換到"Thread" Radio Button,點擊出現(xiàn)的按鈕 ”Make Default"

一個線程斷下來之后,可以通過在線程窗口切換,到其它線程中繼續(xù)運行。

IntelliJ IDEA里在這兒切換

 

我們看到main線程和pool-1-thread-1這兩個線程都處于RUNNING狀態(tài),切換到任何一個都可以繼續(xù)運行。

此時,就可以寫一個多線程的應用,同時向ArryList這一類非線程安全的容器中存放內容,然后觀察為什么他們是線程不安全的,會出現(xiàn)什么問題,生動又形象。

PS: 這里順道說一下,這就是為什么創(chuàng)建線程時建議起一個有意義的名字 ,至少是可以識別的名字,否則在這里都不能區(qū)分出哪個是自己的線程,想切換還麻煩。

2 后退執(zhí)行

這里所說的后退執(zhí)行,是有些時候我們在debug代碼時,懶的每個方法都進入單步調試,就會出現(xiàn)你觀察一個變量值的變化時,某個方法沒跟進去,結果值就變了,不得不重來一次。

依靠后退執(zhí)行的功能,可以后退,就像下棋時悔棋那種功能一樣。當然,這個后退操作的名字是我自己起的,在IDE里被稱為Drop Frame。

 

有了這個功能,我們在Drop 了當前這個Frame之后,已經改變的變量值不會恢復。比如你向當前調用方法里傳入了一個List,并且在方法中向List里添加了內容,那在Drop到調用該方法的地方時,List不會恢復到之前的狀態(tài)。

但是在該方法再次被調用時,你可以觀察List什么時候被改變的,至少不需要再重跑一遍程序了。甚至你可以一言不合就后退。

3 條件斷點

為了調試代碼,就需要在要觀察變更的地方添加斷點,然后小心翼翼的一步步執(zhí)行。

但是如果是在一個循環(huán)里,又或者該方法會被多線程同時調用到的時候,你小心的向下單步調試,發(fā)現(xiàn)沒有你關心的內容,又從循環(huán)開始處跑下來,還是沒你的內容,人就開始煩燥起來。

其實,在添加斷點的時候,我們可以為斷點增加一定的條件,這樣,在指定的條件滿足時,斷點才會生效。

IntelliJ IDEA內,在斷點上右擊,會彈出如下圖的條件框,輸入指定的條件即可。

 

有了條件斷點,不相關,不感興趣的代碼就可以直接跳過了。

4 片斷代碼

這個沒想好用什么名字來表述。有些時候在調試過程中,忽然想招待一段與此相關,但不在源文件中的代碼來觀察一下,輔助進行問題分析。此時你會停止程序,添加代碼然后重新跑一次嗎?

在IDEA里有一個執(zhí)行代碼片斷的功能,可以在當前代碼的上下文內,執(zhí)行你臨時寫的代碼。

例如,當前方法傳入一個List,但這個方法里少一個你后面條件需要使用到的元素,此時你可以臨時使用片斷代碼執(zhí)行的功能,添加一個進去。

注意,在IntelliJ IDEA里,這個上面紅框,像個小計算器的按鈕就是臨時執(zhí)行的功能,點擊之后,會彈出按鈕下方這個Evaluate Expression(Ctrl+F8)的框,輸入代碼,點擊右下角的Evalute即可。返回值會顯示在Result處。

 

這就就相當于臨時改變了變量內容。

然后,還可以調用對象的方法,執(zhí)行功能,獲取屬性值等。

 

5 查看變量修改值

每個IDE在調試代碼時都提供了一個觀察當前上下文變量值的窗口。其實除了查看之外,一些非final的基本類型,還可以直接在此處修改值。這樣如果多次循環(huán)執(zhí)行時,每次可以恢復到期望的值,不需要重啟程序。

常用代碼自動補全快捷鍵

快捷鍵 說明
sout System.out.println(“”);
psvm main方法

常用設置項

常用快捷鍵

快捷鍵 說明
Alt + Ctrl + S 打開Settings
Alt + Ctrl + Shift + S 打開Project Structrue
Alt + Enter 快速修復
Alt + / 單詞自動補全
Alt + Insert 代碼自動生成,比如setter、getter、toString等等
Alt + Shift + V 把類中成員移動到另一個類
Ctrl + Shift + F 格式化代碼
Ctrl + Shift + U 大小寫切換
Ctrl + Shift + I 根據當前上下文顯示代碼定義,比如:光標停在方法上就會以popupview方式顯示該方法的定義
Ctrl + click 跳到源碼
Shift + Shift 搜索所有文件
Ctrl + E 打開最近訪問文件列表

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • spring?boot入門之誕生背景及優(yōu)勢影響

    spring?boot入門之誕生背景及優(yōu)勢影響

    這篇文章主要為大家描述說明了介紹了spring?boot誕生的背景以及其產生的優(yōu)勢影響,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Java數(shù)組的基本操作方法整理

    Java數(shù)組的基本操作方法整理

    這篇文章主要給大家介紹了關于Java中數(shù)組的定義和使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • Java中的for循環(huán)結構及實例

    Java中的for循環(huán)結構及實例

    這篇文章主要介紹了Java中的for循環(huán)結構及實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java正則表達式循環(huán)匹配字符串方式

    Java正則表達式循環(huán)匹配字符串方式

    這篇文章主要介紹了Java正則表達式循環(huán)匹配字符串方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中類加載過程全面解析

    Java中類加載過程全面解析

    這篇文章主要介紹了Java中類加載過程全面解析,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 深入淺析Java 虛擬線程

    深入淺析Java 虛擬線程

    Java21引入了虛擬線程,這是一種輕量級線程,適用于IO密集型的應用,可以極大提高應用的性能和吞吐量,虛擬線程是由傳統(tǒng)線程執(zhí)行的,由JVM控制上下文切換,創(chuàng)建和銷毀的開銷小,適用于高并發(fā)場景,本文介紹Java 虛擬線程的相關知識,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • mybatis 無參構造器的使用

    mybatis 無參構造器的使用

    本文主要介紹了MyBatis中無參構造器的重要性和應用,無參構造器在Java類中具有特殊的意義,它確保了即使在沒有提供任何參數(shù)的情況下,也能夠創(chuàng)建對象并對其進行初始化,下面就來介紹一下
    2024-10-10
  • Spring Boot啟動過程(六)之內嵌Tomcat中StandardHost、StandardContext和StandardWrapper的啟動教程詳解

    Spring Boot啟動過程(六)之內嵌Tomcat中StandardHost、StandardContext和Sta

    這篇文章主要介紹了Spring Boot啟動過程(六)之內嵌Tomcat中StandardHost、StandardContext和StandardWrapper的啟動教程詳解,需要的朋友可以參考下
    2017-04-04
  • Java線程池ThreadPoolExecutor原理及使用實例

    Java線程池ThreadPoolExecutor原理及使用實例

    這篇文章主要介紹了Java線程池ThreadPoolExecutor原理及使用實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java 如何將前端傳來的數(shù)字轉化為日期

    Java 如何將前端傳來的數(shù)字轉化為日期

    這篇文章主要介紹了Java 如何將前端傳來的數(shù)字轉化為日期,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-06-06

最新評論

大方县| 寿光市| 泸州市| 尚义县| 兴仁县| 卢氏县| 阿坝县| 九江县| 东宁县| 万安县| 邢台县| 锦屏县| 南昌县| 酒泉市| 万州区| 长泰县| 吉木乃县| 长沙县| 冀州市| 苍溪县| 南皮县| 阜新| 靖安县| 凯里市| 奈曼旗| 怀化市| 肥乡县| 家居| 台北县| 闽清县| 佛学| 邢台县| 遵义县| 隆子县| 蒙城县| 贵定县| 台江县| 胶南市| 安达市| 达拉特旗| 巍山|