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

Intellij IDEA的一些調(diào)試技巧(小結(jié))

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

程序員的工作內(nèi)容,除了大部分時(shí)間寫代碼之外,因?yàn)橛胁簧俚臅r(shí)間是用在調(diào)試代碼上。甚至說不是在調(diào)試代碼,就是即將調(diào)試代碼。 :)

今天我們來談?wù)務(wù){(diào)試代碼的一些技巧,在使用IDE提供的debugger時(shí)一些快速定位問題的方式。

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

下面進(jìn)入正題。

1 多線程調(diào)試

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

在IDE里斷點(diǎn)停下來的時(shí)候,可以切換到另外的線程中,跑其他的代碼,不會互相影響。當(dāng)然,這里是有個(gè)開關(guān)的,在Eclipse里默認(rèn)開啟,

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

此處把線程的suspend設(shè)置成和Eclipse模式一樣之后,也可以開始多線程應(yīng)用的調(diào)試。

簡單設(shè)置可以直接在斷點(diǎn)處,將suspend改成Thread

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

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

IntelliJ IDEA里在這兒切換

 

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

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

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

2 后退執(zhí)行

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

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

 

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

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

3 條件斷點(diǎn)

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

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

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

IntelliJ IDEA內(nèi),在斷點(diǎn)上右擊,會彈出如下圖的條件框,輸入指定的條件即可。

 

有了條件斷點(diǎn),不相關(guān),不感興趣的代碼就可以直接跳過了。

4 片斷代碼

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

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

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

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

 

這就就相當(dāng)于臨時(shí)改變了變量內(nèi)容。

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

 

5 查看變量修改值

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

常用代碼自動補(bǔ)全快捷鍵

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

常用設(shè)置項(xiàng)

常用快捷鍵

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

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

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

    Java中的for循環(huán)結(jié)構(gòu)及實(shí)例

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

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

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

    Java中類加載過程全面解析

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

    深入淺析Java 虛擬線程

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

    mybatis 無參構(gòu)造器的使用

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

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

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

    Java線程池ThreadPoolExecutor原理及使用實(shí)例

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

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

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

最新評論

土默特右旗| 昌黎县| 开平市| 东阿县| 文登市| 蒙阴县| 乃东县| 县级市| 多伦县| 桐梓县| 四会市| 肇州县| 河津市| 顺义区| 海安县| 陆河县| 麻栗坡县| 长岭县| 东阳市| 自治县| 洪泽县| 万州区| 泰安市| 车致| 东明县| 沙洋县| 班玛县| 抚顺县| 中方县| 枞阳县| 红原县| 陆良县| 明星| 栾城县| 开平市| 上饶市| 洞口县| 常熟市| 长寿区| 佳木斯市| 遂宁市|