BaNg@taobao

          Just Do It!

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            20 Posts :: -1 Stories :: 202 Comments :: 0 Trackbacks
          調(diào)試其實(shí)是門(mén)很深的學(xué)問(wèn),在分析Eclipse源代碼的過(guò)程中積累了很多經(jīng)驗(yàn),但大多與多數(shù)人無(wú)用,現(xiàn)介紹一個(gè)簡(jiǎn)單而非常有用的調(diào)試功能及它的適用場(chǎng)合。

          首先看一段代碼:

           1 
           2 public class Simple {
           3     public static void main(String[] args) {
           4         int max = 10;
           5         for(int i = 0; i < max ; i++)
           6         {
           7             simpleAction(i);
           8         }
           9     }
          10     
          11     private static void simpleAction(int i) {
          12         int tmp = i;
          13         if (i == 5)
          14             throw new NullPointerException("5 is invalid number!");
          15         System.out.println("Number "+tmp+" reached!");
          16     }
          17 }
          18
          這段代碼非常簡(jiǎn)單,就是打印10個(gè)數(shù)字,但中間一個(gè)出了異常,假設(shè)我們忘記Eclipse的Exception BreakPoint(在復(fù)雜的場(chǎng)合,不一定拋Exception),于是看到控制臺(tái)除了異常信息之后,我們可在第7行和第12行設(shè)置斷點(diǎn),看調(diào)用i到底發(fā)生了什么。

          啟動(dòng)調(diào)試后一切正常,除了你必須F8 4次,因?yàn)?-4正常,但也在斷點(diǎn)處,很煩人。有沒(méi)有可能激活斷點(diǎn)一次呢?當(dāng)然可以。

          從控制臺(tái)看到5 is invalid number,那么這次調(diào)試只針對(duì)5,我們可以簡(jiǎn)單的設(shè)置一下:

          第一步:



          第二步在出現(xiàn)的對(duì)話框內(nèi),選中Enable Condition,接著輸入我們的condition: i==5



          OK,再調(diào)試啟動(dòng)Simple,發(fā)現(xiàn)斷點(diǎn)激活是在i=5的時(shí)候,我們就可以F6一步一步看到底發(fā)生了什么。

          這種條件調(diào)試在使用復(fù)雜的框架的時(shí)候極其有用,舉個(gè)例子:
          GMF的AbstractActionHandler有N多子類(lèi),你必須直接或間接的繼承它,同時(shí)使用它的API,在它的API很復(fù)雜而我還在探索
          的情況下,出錯(cuò)在所難免,出錯(cuò)后在AbstractActionHandler的某個(gè)API里設(shè)置了一斷點(diǎn),但你只想關(guān)心自己寫(xiě)的子類(lèi),否則會(huì)按F8超過(guò)1分鐘,那么我們可以在上面的condition text里面輸入:

          this.getClass().getName().equals("foo.bar.MyDiagramAction")

          就可以省掉很多麻煩。

          當(dāng)然condition可以寫(xiě)的很復(fù)雜,可以針對(duì)斷點(diǎn)的context寫(xiě)任意Java代碼。



          posted on 2008-07-22 23:10 Always BaNg. 閱讀(1952) 評(píng)論(12)  編輯  收藏 所屬分類(lèi): JavaEclipse

          Feedback

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-22 23:39 隔葉黃鶯
          呵呵,我經(jīng)常用這個(gè)功能的。  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-22 23:40 隔葉黃鶯
          為什么你的日志在 blogjava.net 首頁(yè)面會(huì)顯示

          Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->&nb...

          呢?  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-22 23:51 4980
          很不錯(cuò),下次試試  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-23 08:42 andy 林
          哈哈 看來(lái)我土了 我第一次看到  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-23 08:59 Always BaNg.
          @隔葉黃鶯
          估計(jì)是注釋截取導(dǎo)致的

          <!-- xxxxx

          后面的被劫了所以能看到。  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-23 09:00 raof01
          老土~~“遠(yuǎn)古”時(shí)代就有條件斷點(diǎn)功能了。  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-23 09:10 bigbigbig
          感謝樓主,非常的實(shí)用~  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-23 09:26 44you
          我也用一下  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-23 10:54 shanxmxj
          呵呵`~不錯(cuò) 下次試試看。  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-23 12:28 zhuxing
          條件斷點(diǎn)
          異常斷點(diǎn)
          類(lèi)加載斷點(diǎn)
          熱替換
          ....
          這些應(yīng)該是eclipse開(kāi)發(fā)者經(jīng)常使用到的

          調(diào)試功能使用的熟練程度,也會(huì)從一定程度反應(yīng)出一個(gè)開(kāi)發(fā)人員的基本功。扎實(shí)的調(diào)試能力,對(duì)修復(fù)bug、研究新代碼、加速代碼編寫(xiě)速度等都有很大的作用  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能[未登錄](méi) 2008-07-23 20:28 hehe
          這是我或許知道的一個(gè)調(diào)試功能  回復(fù)  更多評(píng)論
            

          # re: 或許你不知道的一個(gè)調(diào)試功能 2008-07-24 14:47 Yata
          還沒(méi)用過(guò),回頭試試!  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 通江县| 亳州市| 滁州市| 余江县| 望江县| 衢州市| 西宁市| 汝州市| 色达县| 漳浦县| 宜都市| 云梦县| 古蔺县| 石首市| 清涧县| 五华县| 光泽县| 铁岭市| 滦南县| 博乐市| 堆龙德庆县| 甘德县| 罗江县| 东辽县| 行唐县| 垫江县| 灯塔市| 华坪县| 郓城县| 四子王旗| 南部县| 隆化县| 田东县| 洛南县| 龙泉市| 湖南省| 和平县| 浪卡子县| 山丹县| 维西| 逊克县|