Idea的一些調試技巧及設置todo

?

?

?

?

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

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

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

下面進入正題。

1 多線程調試

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

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

但是在IntelliJ IDEA里默認是沒有開啟的。也就是說如果你在IDEA里代碼里加斷點,雖然一個線程的斷了下來,但其他線程的已經執行過了。
此處把線程的suspend設置成和Eclipse模式一樣之后,也可以開始多線程應用的調試。
簡單設置可以直接在斷點處,將suspend改成Thread

?

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

?


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

IntelliJ IDEA里在這兒切換

?

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

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

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

2 后退執行

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

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

?


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

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

3 條件斷點

為了調試代碼,就需要在要觀察變更的地方添加斷點,然后小心翼翼的一步步執行。
但是如果是在一個循環里,又或者該方法會被多線程同時調用到的時候,你小心的向下單步調試,發現沒有你關心的內容,又從循環開始處跑下來,還是沒你的內容,人就開始煩燥起來。

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

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

?


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

4 片斷代碼

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

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

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

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

?


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

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

?


5 查看變量修改值

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

?



作者:侯樹成
鏈接:http://www.jianshu.com/p/cfa0f049054e
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

TODO是什么說白了它就是一個高亮顯示的注釋,方便定位的工具。(eclipse也有,小白估計沒用過)

?

IntelliJ idea? 預定義了兩種TODO模式如下:

?

\btodo\b.*
\bfixme\b.*

?解釋一下上面模式啥意思:不懂的時候第一眼這是什么東西啊,其實熟悉正則表達式的人一想也就明白了,它就是兩個正則表達式,"正則中“\b”是元字符代表著單詞的開頭或結尾,也就是單詞的分界處。現在我們看上面兩個正則表達式“\b ? \b"中字符串:todo跟fixme,該表達式單純表達的意思就是匹配todo.*跟fixme.*

todo可以解釋為“要去做的xxx,還未發生”(想一下我們學過的英語動詞不定式 to? do? sth),fixme即需要自己修改的,放到編程的注釋中就是:

// TODO + 說明:

在該注釋處有功能代碼待編寫,待實現的功能在說明中會簡略說明。

// FIXME + 說明:

該注釋處代碼需要修正,甚至代碼是錯誤的,不能工作,需要修復,如何修正會在說明中簡略說明。

下面直接上效果圖:下圖一選中第一個Pattern

?


---------------------
作者:aspu O_O
來源:CSDN
原文:https://blog.csdn.net/dyr_1203/article/details/83016441
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

?

?

?



IDEA 中定義自己的TODO 并設置快捷鍵

?

?

?

?

?

剛好看到阿里巴巴開發規范的對于TODO的說明,粘貼出來有需要的可以參考

11. 【參考】特殊注釋標記,請注明標記人與標記時間。注意及時處理這些標記,通過標記掃描, 經常清理此類標記。線上故障有時候就是來源于這些標記處的代碼。 ?

? ? ? ?1) 待辦事宜(TODO):( 標記人,標記時間,[預計處理時間]) ? ?表示需要實現,但目前還未實現的功能。? 這實際上是一個 Javadoc 的標簽,目前的 Javadoc 還沒有實現,但已經被廣泛使用。只能應用于類,接口和方法(因為它是一個 Javadoc 標簽)。 ?

? ? ? 2) 錯誤,不能工作(FIXME):(標記人,標記時間,[預計處理時間]) ? ?在注釋中用 FIXME 標記某代碼是錯誤的,而且不能工作,需要及時糾正的情況

需要阿里巴巴Java開發手冊(1.4.0版本)以及插件 可以去官方的GitHub上下載:https://github.com/alibaba/p3c
---------------------
作者:o猜拳0
來源:CSDN
原文:https://blog.csdn.net/qq_38878455/article/details/82933174
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

?

轉載于:https://www.cnblogs.com/softidea/p/7245884.html

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

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

相關文章

安裝Node.js和npm

安裝Node.js和npm 學習了:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143450141843488beddae2a1044cab5acb5125baf0882000 轉載于:https://www.cnblogs.com/stono/p/6891242.html

c++ cstring 轉換 char_cstring.h庫常用函數

上周,老師講了大整數的運算方法,我對大數的存儲和運算還有些不理解,仔細思考了一下,其實還是訓練孩子對機器存儲數據的各種掌握和運用吧。不多想,先期孩子雖然一直學習,但是缺乏對知識的系統整理&#xff0…

Django后臺管理之商品分類

商品分類 1.建表字段 1.pid:用來綁定父類的 2.path:用來拼接id,保證查詢出的數據是按照層級關系展示的2.concat 把表中的兩個字段拼接成一個新的字段,通過as重新命名3.查詢語句 1.按照第二步拼接成新的字段的名字進行排序查詢…

PMT_Stream數據結構

0123 012345670123456701234567012345671stream_type reserved_1elementary_PIDreserved_2ES_info_length 2ES_info_length …(描述信息)3…(描述信息)4crc32 1 節目號 stream_type 8指示了PID為elementary_PID的PES分組中原始流的類型&#xf…

Maven:基本使用

為什么80%的碼農都做不了架構師?>>> 1.項目管理工具: Maven的repository,說白了就是dependency的倉庫,它按照一定的規則將dependency存放起來,以作緩存,如果本機的 repository找不到某個depen…

UVA 11383 - Golden Tiger Claw(二分圖完美匹配擴展)

UVA 11383 - Golden Tiger Claw 題目鏈接 題意:給定每列和每行的和,給定一個矩陣,要求每一個格子(x, y)的值小于row(i) col(j),求一種方案,而且全部行列之和的和最小 思路:A二分圖完美匹配的擴展&#xff…

淺談web開發以及django的安裝和入門

淺談web開發 1.B/S和C/S結構 B/S:瀏覽器與服務器進行的交互模式(不需要官方下載的,一夫多妻制) C/S:客戶機與服務器進項的交互模式(必須官方下載的,一夫一妻制2.MVC和MVT MVC: M:模型層(Model&#xff0…

大數據可視化html模板開源_大數據時代-可視化數據分析平臺必不可少

公眾號:不安分的猿人一、項目簡介DataGear是一款數據管理與可視化分析平臺,使用Java語言開發,采用瀏覽器/服務器架構,支持多種數據庫, 主要功能包括數據管理、SQL工作臺、數據導入/導出、數據集管理、圖表管理、看板管…

java輸出一些內容到日志文件

在eclipse中新建一個項目,在src下新建一個log4j.properties文件,文件內容為下:log4j.rootLogger debug,stdout,D,Elog4j.appender.E org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File E://logs/error.log log4j.appender.E…

PMT_Header-節目映射表的數據結構2

1 標志位 table_id8固定為0x02 ,標志是該表是PAT2段語法標志位section_syntax_indicator 1段語法標志位,固定為13 zero104保留字reserved_12保留字5有用的字節數section_length 12表示這個字節后面有用的字節數&#x…

Django中的Model模型

Model模型 模型是你的數據的唯一的、權威的信息源。它包含你所儲存數據的必要字段和行為。 通常,每個模型對應數據庫中唯一的一張表。 每個模型都是django.db.models.Model的一個Python 子類。模型的每個屬性都表示為數據庫中的一個字段。Django 提供一套自動生成的…

python有多少種模塊_python如何查看有哪些模塊

Question: 如何查看正則表達式模塊re及其相關函數的意義 1、終端命令行下 python >> import sys >> sys.modules ################################### 一長串信息中字段modules對應的模塊即為包含的模塊。 ################################### >> import r…

淺談面向對象的javascript幾個特性

javascript中的this和new javascript是一門很靈活的語言,尤其是function。他即可以以面向過程的方式來用,比如: function getName() {return 張三 } getName() 也可以以面向對象的方式來用,比如: function User() {th…

【Netty】ChannelHandler和ChannelPipeline

一、前言 前面學習了Netty的ByteBuf,接著學習ChannelHandler和ChannelPipeline。 二、ChannelHandler和ChannelPipeline 2.1 ChannelHandler 在ChannelPipeline中,ChannelHandler可以被鏈在一起處理用戶邏輯。 1. Channel生命周期 Channel接口定義了一個…

TS流頭部的調整字段

見 http://hi.baidu.com/xumingxsh/blog/item/7b178903f1fa98014afb512f.html http://hi.baidu.com/xumingxsh/blog/item/ba50dba320a10da3caefd02f.html

electron 入坑記

最近有個想法,想寫個簡單的應用程序.平時在 Mac上開發,最終有可能運行在 Windows 上.看了一下,Electron 比較簡單,應該可以一試. 關于安裝 我機器上是有 Node 環境的,按著官方教程 直接 npm install electron 結果運行到 npm install.js就不到了..下午上班有事,也沒管他,結果一…

自動駕駛安全駕駛規則_自動駕駛知識科普 自動駕駛汽車的七大核心技術

自動駕駛技術的本質是用機器視角去模擬人類駕駛員的行為,其技術框架可以分為三個環節:感知層、決策層 和執行層,具體涉及傳感器、計算平臺、算法、高精度地圖、OS、HMI等 多個技術模塊。目前自動駕駛L3商業化技術已經成熟,L4級/L5…

orcal數據操作

1.將數據庫ZHSY完全導出,用戶名baseusernj密碼baseusernj導出到D:\daochu.dmp中 exp baseusernj/baseusernjZHSY filed:\daochu.dmp fully exp baseuserhf/baseuserhfZJCPDB fileC:\105hf.dmp ownerbaseuserhf 2.導入那個數據庫的用戶就寫那個,第一個是用戶名&#…

H264實時編碼及NALU,RTP傳輸(ZZ)

rfc3984 Standards Track [Page 2] RFC 3984 RTP Payload Format for H.264 Video February 2005 1. 按照RFC3984協議實現H264視頻流媒體nalu單元 包起始 0x 00 00 00 01H.264 NAL格式及分析器http://hi.baidu.com/zsw%5Fdavy/b ... c409cc7cd92ace.htmlhttp://hi.b…