BaNg@taobao

          Just Do It!

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            20 Posts :: -1 Stories :: 202 Comments :: 0 Trackbacks
          調試其實是門很深的學問,在分析Eclipse源代碼的過程中積累了很多經驗,但大多與多數人無用,現介紹一個簡單而非常有用的調試功能及它的適用場合。

          首先看一段代碼:

           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
          這段代碼非常簡單,就是打印10個數字,但中間一個出了異常,假設我們忘記Eclipse的Exception BreakPoint(在復雜的場合,不一定拋Exception),于是看到控制臺除了異常信息之后,我們可在第7行和第12行設置斷點,看調用i到底發生了什么。

          啟動調試后一切正常,除了你必須F8 4次,因為0-4正常,但也在斷點處,很煩人。有沒有可能激活斷點一次呢?當然可以。

          從控制臺看到5 is invalid number,那么這次調試只針對5,我們可以簡單的設置一下:

          第一步:



          第二步在出現的對話框內,選中Enable Condition,接著輸入我們的condition: i==5



          OK,再調試啟動Simple,發現斷點激活是在i=5的時候,我們就可以F6一步一步看到底發生了什么。

          這種條件調試在使用復雜的框架的時候極其有用,舉個例子:
          GMF的AbstractActionHandler有N多子類,你必須直接或間接的繼承它,同時使用它的API,在它的API很復雜而我還在探索
          的情況下,出錯在所難免,出錯后在AbstractActionHandler的某個API里設置了一斷點,但你只想關心自己寫的子類,否則按F8超過1分鐘,那么我們可以在上面的condition text里面輸入:

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

          就可以省掉很多麻煩。

          當然condition可以寫的很復雜,可以針對斷點的context寫任意Java代碼。



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

          Feedback

          # re: 或許你不知道的一個調試功能 2008-07-22 23:39 隔葉黃鶯
          呵呵,我經常用這個功能的。  回復  更多評論
            

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

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

          呢?  回復  更多評論
            

          # re: 或許你不知道的一個調試功能 2008-07-22 23:51 4980
          很不錯,下次試試  回復  更多評論
            

          # re: 或許你不知道的一個調試功能 2008-07-23 08:42 andy 林
          哈哈 看來我土了 我第一次看到  回復  更多評論
            

          # re: 或許你不知道的一個調試功能 2008-07-23 08:59 Always BaNg.
          @隔葉黃鶯
          估計是注釋截取導致的

          <!-- xxxxx

          后面的被劫了所以能看到。  回復  更多評論
            

          # re: 或許你不知道的一個調試功能 2008-07-23 09:00 raof01
          老土~~“遠古”時代就有條件斷點功能了。  回復  更多評論
            

          # re: 或許你不知道的一個調試功能 2008-07-23 09:10 bigbigbig
          感謝樓主,非常的實用~  回復  更多評論
            

          # re: 或許你不知道的一個調試功能 2008-07-23 09:26 44you
          我也用一下  回復  更多評論
            

          # re: 或許你不知道的一個調試功能 2008-07-23 10:54 shanxmxj
          呵呵`~不錯 下次試試看。  回復  更多評論
            

          # re: 或許你不知道的一個調試功能 2008-07-23 12:28 zhuxing
          條件斷點
          異常斷點
          類加載斷點
          熱替換
          ....
          這些應該是eclipse開發者經常使用到的

          調試功能使用的熟練程度,也會從一定程度反應出一個開發人員的基本功。扎實的調試能力,對修復bug、研究新代碼、加速代碼編寫速度等都有很大的作用  回復  更多評論
            

          # re: 或許你不知道的一個調試功能[未登錄] 2008-07-23 20:28 hehe
          這是我或許知道的一個調試功能  回復  更多評論
            

          # re: 或許你不知道的一個調試功能 2008-07-24 14:47 Yata
          還沒用過,回頭試試!  回復  更多評論
            

          主站蜘蛛池模板: 财经| 镇坪县| 望奎县| 元江| 县级市| 兰州市| 项城市| 通州区| 都兰县| 庐江县| 桓台县| 南华县| 东乌| 达拉特旗| 齐齐哈尔市| 师宗县| 德昌县| 柘城县| 常宁市| 胶南市| 陈巴尔虎旗| 闻喜县| 囊谦县| 永德县| 安远县| 娱乐| 广昌县| 碌曲县| 江永县| 仙居县| 福贡县| 台州市| 丘北县| 新营市| 蓬莱市| 云梦县| 石阡县| 通海县| 勐海县| 晋宁县| 昭苏县|