Android eclipse中程序調試

轉自:http://www.cnblogs.com/qingblog/archive/2012/07/27/2611469.html


一:斷點調試

用eclipse開發android程序的時,跟VS一樣是可以斷點單步調試的.
步驟如下.
1 設置斷點:在編碼窗體的左邊框上用鼠標雙擊,或者右鍵點擊菜單,選擇 Toggle Breakpoint菜單項即可.



2 在debug模式下運行程序進入調試狀態:通過點擊工具欄上的小蟲按鈕或者是在項目右鍵點擊然後選擇Debug As,Android Application菜單,啓動程序的調試模式.
第一次運行調試模式eclipse會彈出如下確認窗口




當程序運行到你的斷點地方時就會停下,這時可以按照下面的功能鍵按需求進行調試:
[1]快捷鍵(F8)直接執行程序,直到下一個斷點處停止。
[2]快捷鍵(F5)單步執行程序,遇到方法時進入。
[3]快捷鍵(F6)單步執行程序,遇到方法時跳過。
[4]快捷鍵(F7)單步執行程序,從當前方法跳出。


查看斷點時變量當前的值:右鍵點擊對應的變量,在菜單上選擇 watch 菜單項,變量的值就會出現在 expressions窗口中.




二、Android應用調試之工具

 

 

Eclipse   Java編輯器

 

這個編輯器不但能夠爲開發者提供代碼編寫、語法糾錯和實時編譯等常用功能,而且還能夠對Java源代碼進行快速修改、重構等高級操作。

 

詳講:錯誤提示符(一個小電燈泡圖標和一個紅色的X)指出了錯誤所在的位置,在屏幕的右上角有一個紅色的標記,它的作用是提示開發者該文檔的某個位置存在錯誤。在文檔的右邊空白處還能看到一個紅色的矩形框,它指明瞭錯誤所在的大致位置,如果代碼量非常大,可以將豎直滾動條拖到這個紅色矩形塊的位置,快速定位錯誤。

 

Java和Dalvik編譯、構建系統

 

Android應用程序最終是運行在手機(或者模擬器)的Dalvik虛擬機上的。因此對Android應用程序的編譯和構建需要用到Java編譯器和Dalvik字節碼轉換器。

 

Eclipse調試器

 

Android  SDK提供了從Dalvik字節碼到Java源代碼的映射,這樣開發者就可以直接使用Eclipse功能強大的調試器進行Android應用程序的調試。

 

詳講:Android   SDK對於Eclipse調試器來說是完全透明的,可以在Eclipse中像調試普通Java應用程序那樣調試Android應用程序。在代碼中設置斷點是常用的一種調試手段,在Eclipse中可以通過如下3種方法設置斷點。

 

  • 使用菜單命令。首先將光標放置到想要設置斷點的行,然後執行菜單命令Run->Toggle  Breakpoint.
  • 使用鍵盤。選擇想要設置斷點的行,在鍵盤上按下快捷鍵Ctrl+Shift+B。
  • 在編輯器中直接雙擊想要設置斷點行左邊的空白處。

 

執行菜單命令Run->Debug->Android  Application,開始對程序進行調試。初始化過程與正常運行程序一樣,如果需要會對項目進行重新構建,然後啓動模擬器,加載程序。程序正常啓動以後在模擬器上就會出現DebugTest的用戶界面。程序將會在斷點位置停止執行,Eclipse會自動切換到Debug佈局。在Debug佈局中包含了如下一些視圖:

 

  • Debug

 

         Debug標籤頁用來顯示程序執行過程中的調用棧。在Debug標籤頁的工具欄上有一些功能按鈕,提供了繼續、暫停、終止、單步執行、逐過程執行和返回等功能。

 

  • Variables和Breakpoints

 

          Variables標籤頁中可以顯示出當前代碼作用域內的所有變量值。Breakpoints標籤頁中列出了程序中所有的斷點。

 

  • Editor

 

          Debug佈局中的編輯器與Java佈局中的編輯器一樣,只不過在Debug佈局中當前執行的代碼會高亮顯示。

 

  • Outline

 

           Outline視圖可以顯示出當前項目的結構圖。

 

  • Console/Tasks/Properties

 

          這三個視圖位於Debug佈局的左下角,其中Console(命令行)視圖是最有用的一個,在程序調試過程中許多重要的信息都顯示在Console視圖中。

 

Logcat

 

Logcat是Android  SDK中的一個通用日誌工具。在程序的運行過程中可以通過Logcat打印狀態信息和錯誤信息等。Logcat另外一個重要的用途是在程序啓動和初始化的過程中向開發者報告進展狀況。

 

       當應用程序在模擬器中加載並啓動時,Eclipse會自動切換到Debug佈局,關於程序運行狀態的各種信息就會出現在右下方的Logcat視圖中。爲了更加方便的瀏覽Logcat視圖中的內容,可以用鼠標單擊Logcat視圖右上角的最大化按鈕。Logcat視圖中出現的信息,按照消息產生的順序,最開始是關於模擬器啓動的消息,接着是Android操作系統啓動的消息,然後是各種應用程序啓動消息,最後纔是與加載程序啓動相關的消息。在Logcat視圖的工具欄中可以看到標記爲V、D、I、W和E的幾個按鈕,他們的作用是對消息進行過濾

 

  • V(Verbose)顯示所有類型的消息;
  • D(Debug)顯示Debug、Information、Warning和Error消息;
  • I(Information)只顯示Information、Warning和Error消息;
  • W(Warning)只顯示Warning和Error消息;
  • E(Error)只顯示Error消息。

 

Logcat視圖中包含了如下列:

 

  • Time:用於顯示消息產生的時間;
  • Priority(這一列並沒有在標題欄中顯示地標出)消息的級別(取值爲D、I、W或者E,分別代表Debug、Information、Warning和Error);
  • pid:產生消息的進程ID;
  • tag:消息產生來源的簡短描述;
  • Message:消息的詳細內容。

 

注意:在程序開發過程中,如果需要多人協作進行錯誤的調試,那麼就要對Logcat日誌進行共享。導出Logcat日誌的方法非常簡單,首先在Logcat視圖中選中想要導出的日誌內容,然後鼠標單擊Logcat視圖右上角的向下箭頭,這時就會彈出一個菜單,在菜單的最下方有一個名爲Exports Selection as  Text的菜單項,執行這個菜單項,就可以將選中的日誌保存成一個文本文件。

 

Android  Debug   Bridge(adb)

 

adb是Android  SDK中包含的一個可以直接對Android手機或者模擬器進行操作和調試的命令行工具。

 

DDMS(Dalvik虛擬機調試監控服務,Dalvik  Debug  Monitor  Service)

 

DDMS是Android  SDK中包含的一個窗口化的程序調試環境,它與Eclipse和Dalvik虛擬機緊密結合在一起。

 

詳講:見日誌——常見的adb命令。

 

Traceview

 

Android平臺特有的調試工具,它可以跟蹤並報告程序運行過程中的所有方法調用和每個方法的耗時。

三、Android調試總結

一. Log 日誌輸出

    可在 Window->Show View->Other->Android->Log Cat 調出 Log Cat 界面

    常用的日誌: 普通運行信息:i  錯誤信息:e  

    輸出日誌: Log.i(TAG, strings); 其中TAG 爲日誌標識符,一般用類名錶示(方便查看此日誌是某個類的輸出),且常聲明爲靜態常量.stirngs 爲要輸出的字符串.例:

      Log.i(TAG, strings)

    成功運行程序後,在輸出日誌Log Cat 視圖中 即可查看到標識爲 PhoneSMSTest 的信息.

    PS:可在Log cat 中創建一個過慮器,Log cat->create filter->Filter Name:隨意.by tab name: 日誌標識符,此處爲 PhoneSMSTest

  二.Debug 調試

    雙擊代碼編輯器左側設置斷點 點擊菜單欄 Run(或F11) 便可開始程序調試.程序運行到斷點處時會彈出一對話框,點擊 yes  跳入Debug 視圖, 找到正在調試的類

    

    

 

    Run->step Into 逐語句 (或F5)

    Run->step Over 逐過程 (或F6,略過方法)

    Run->step Return 單步返回(或F7 , 逐語句進入方法後跳出.);

    Run->Run To Line 運行到光標處 (或 Ctrl + R)

    Run->Resume 斷續運行到結束 (或F8)

 

  三. 單元測試

    1.配置AndroidMainfest.xml 

       在application 中加入

<uses-library android:name="android.test.runner" /> <!-- 不要寫入 activity 中 -->

 

       在application 外加入

    <!-- targetPackage 要與 mainfest 中的 package 的值相同. -->
    <instrumentation android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.PhoneSMS.melody" android:label="Test for my app" />

    2.編寫單元測試代碼

       注意:在targetPackage 包中建立單元測試類 如:在 com.PhoneSMS.melody 中建立 PhoneSMSTest.java. 此類必須繼承 AndroidTestCase 且其中的測試方法必須以 test 開頭, 如: testPhoneSMS(); 

       

 

       代碼如下:

        PhoneSMSTest.java

    在大綱視圖(Outline)中找到測試方法->右健->Run As ->Android JUnit Test 即可.ps: 調出Outline :window->Show View ->Outline

       

    

四、Android 開發之Eclipse Debug調試詳解

 1.在程序中添加一個斷點

 

  如果所示:在Eclipse中添加了一個程序斷點

 

  

 

  在Eclipse中一共有三種添加斷點的方法

  第一種: 在紅框區域右鍵出現菜單後點擊第一項 Toggle Breakpoint 將會在你右鍵代碼的哪一行添加一個程序斷點 (同樣的操作方可取消程序斷點)

  第二種: 在紅框區域雙擊鼠標左鍵將會在你雙擊代碼的哪一行添加一個程序斷點 (同樣的操作方可取消程序斷點)

 

  

 

  第三種 :在光標停留的地方使用快捷鍵 Ctrl + Shift + B 將會在光標停留的這一行添加一個程序斷點 (同樣的操作方可取消程序斷點)

 

  

 

  2.運行Debug 調試 讓程序停留在添加的斷點上

 

  如下圖所示,在紅框內點擊下拉菜單選中需要調試的項目 則開始運行Debug調試

  如果不在下拉表中選直接點擊表示Debug運行默認項目(默認項目爲上一次運行的項目)

  Debug調試 快捷鍵爲單擊F11

 

  

 

  分析一下如何科學的添加程序斷點, 上圖中我爲了加斷點查看生成出來隨機數的值我一共添加了6個程序斷點,綠框表示最爲科學的斷點位置 ,紅框表示不科學的位置。 我們分析一下爲什麼, 如果switch case 中的代碼片段過長 或者 case 的數量過多 如果採用紅框的方式來添加程序斷點,程序員須要添加很多程序斷點萬一有疏漏 所以會很難快速定位代碼執行到了那裏 ,如果使用綠框的方式添加程序斷點,程序員只須要在斷點出按 F6 單步跳過這一行代碼就會走進正確的case中方便繼續調試。

 

  

 

  Debug調試運行後,程序停在了紅框處,按F6單步跳過 發現隨機數爲4 程序停留在了綠框中,程序員可以迅速定位random的值爲4

3.程序停留後查看變量的數值

 

  藍框中的內容表示爲斷點的入口方法, 就好比你的斷點是從那個方法進來的,學會看這個真的非常重要, 好比我現在明確知道我的一個方法在被調用的時候方法中會出現錯誤,但是這個方法在程序中100個地方都在調用,我可能斷定實在那裏調用的時候出的錯誤,我不可能在100個調用它的地方都加一個斷點,我可以在方法中添加程序斷點 然後在籃框中查看程序是從那個地方走進這個方法的,便可以快速定位問題所在。

  綠框中可以查看當前方法中所有變量的值,但是如果變量非常多在這裏看就比較麻煩,可以使用紅框的方法查看。

  紅框中可以右鍵變量名點擊咖啡框中的watch 後 在紫框中Expressions 就可以看到變量的數值了。

  BreakPoints 中會記錄程序中添加過多少程序斷點。

 

  

 

  4分享一些Eclipse中Debug的一些小技巧

 

  watch 過的變量 和我們自己加的程序斷點不會被Eclipse 自動刪除 除非我們手動刪除否則會一直留在紫框中,這些數值會拖慢Eclipse 開發工具,如果過多的話很可能會造成 Eclipse 崩潰(有可能是Eclipse的BUG),讓開發變得非常痛苦,所以雨鬆MOMO在這裏建議大家在每次Debug調試的時候將紫框中之前 加的程序斷點 和 watch過的變量 全不手動清空,只添加這一次調試須要的斷點就可以了,這樣的話 Eclipse 就不會被這些拖慢進程的東西所導致崩潰。

 

  5.連接真機調試

 

  第一步 打開自己的手機在設置中選擇應用程序 然後選擇開發 然後選中USB調試。

  第二步 用USB線連接手機到電腦,一般情況會自動安裝驅動,如果無法安裝驅動的話 就去下載一個豌豆莢 或者91助手,讓它幫我們手機自動安裝驅動 很方便的。

  第三步 驅動安裝成功後會在Device中看到真機(紅框中) 綠框中爲android電腦模擬器

 

  .

 

  運行項目後彈出設備選擇窗口 第一個爲模擬器 第二個紅框內的爲我連接電腦的真機 MOTO的里程碑,選擇完後點擊OK 就可以通過真機來調試程序了,簡單吧?是不是很給力呢呵呵。

 

  

6.Android 開發中Log信息的打印

 

  本人做過J2ME 開發 Android開發 iPhone開發 發現J2ME 的模擬器 還有Iphone的模擬器都非常給力速度很很快(模擬器比真機快) 唯獨android的模擬器 是最不給力的 (真機比模擬器快) 實在是慢的不行 連接上真機可以快一點 但是一樣還是慢 尤其是Debug的時候 簡直是太不給力了(發點牢騷大家別介意哦。所以有時候我在開發Android的時候不到萬不得已我不去Debug 我會使用Log去打印我須要的數據 下面我教大家如何在Andoid下打印Log信息。希望大家都學會使用log.

 

 

 

  常用的Log有5個:Log.v() Log.d() Log.i() Log.w() Log.e() 。

  根據首字母對應VERBOSE,DEBUG,INFO, WARN,ERROR。

  以上這些Log系統都會打印出來。

  打開LogCat頁面發現系統打印了很多Log信息 我們不好定位出剛纔自己打的Log,如圖所示點擊紅框內的“+”符號彈出下方窗口後在Filter Name : 和 by Log Tag: (藍框內)填寫我們剛纔打的LOG tag “random” 注意這兩項都必需填寫 然後單擊OK後 方可在綠框中看到我們剛纔打的random的Log 。怎麼樣還是很簡單的吧 呵呵。

 

  

最後附上Eclipse 在開發中使用到的快捷鍵很實用噢(轉載)

  Ctrl+1 快速修復(最經典的快捷鍵,就不用多說了)

  Ctrl+D: 刪除當前行

  Ctrl+Alt+↓ 複製當前行到下一行(複製增加)

  Ctrl+Alt+↑ 複製當前行到上一行(複製增加)

  Alt+↓ 當前行和下面一行交互位置(特別實用,可以省去先剪切,再粘貼了)

  Alt+↑ 當前行和上面一行交互位置(同上)

  Alt+← 前一個編輯的頁面

  Alt+→ 下一個編輯的頁面(當然是針對上面那條來說了)

  Alt+Enter 顯示當前選擇資源(工程,or 文件 or文件)的屬性

  Shift+Enter 在當前行的下一行插入空行(這時鼠標可以在當前行的任一位置,不一定是最後)

  Shift+Ctrl+Enter 在當前行插入空行(原理同上條)

  Ctrl+Q 定位到最後編輯的地方

  Ctrl+L 定位在某行 (對於程序超過100的人就有福音了)

  Ctrl+M 最大化當前的Edit或View (再按則反之)

  Ctrl+/ 註釋當前行,再按則取消註釋

  Ctrl+O 快速顯示 OutLine

  Ctrl+T 快速顯示當前類的繼承結構

  Ctrl+W 關閉當前Editer

  Ctrl+K 參照選中的Word快速定位到下一個

  Ctrl+E 快速顯示當前Editer的下拉列表(如果當前頁面沒有顯示的用黑體表示)

  Ctrl+/(小鍵盤) 摺疊當前類中的所有代碼

  Ctrl+×(小鍵盤) 展開當前類中的所有代碼

  Ctrl+Space 代碼助手完成一些代碼的插入(但一般和輸入法有衝突,可以修改輸入法的熱鍵,也可以暫用Alt+/來代替)

  Ctrl+Shift+E 顯示管理當前打開的所有的View的管理器(可以選擇關閉,激活等操作)

  Ctrl+J 正向增量查找(按下Ctrl+J後,你所輸入的每個字母編輯器都提供快速匹配定位到某個單詞,如果沒有,則在stutes line中顯示沒有找到了,查一個單詞時,特別實用,這個功能Idea兩年前就有了)

  Ctrl+Shift+J 反向增量查找(和上條相同,只不過是從後往前查)

  Ctrl+Shift+F4 關閉所有打開的Editer

  Ctrl+Shift+X 把當前選中的文本全部變味小寫

  Ctrl+Shift+Y 把當前選中的文本全部變爲小寫

  Ctrl+Shift+F 格式化當前代碼

  Ctrl+Shift+P 定位到對於的匹配符(譬如{}) (從前面定位後面時,光標要在匹配符裏面,後面到前面,則反之)

  下面的快捷鍵是重構裏面常用的,本人就自己喜歡且常用的整理一下(注:一般重構的快捷鍵都是Alt+Shift開頭的了)

  Alt+Shift+R 重命名 (是我自己最愛用的一個了,尤其是變量和類的Rename,比手工方法能節省很多勞動力)

  Alt+Shift+M 抽取方法 (這是重構裏面最常用的方法之一了,尤其是對一大堆泥團代碼有用)

  Alt+Shift+C 修改函數結構(比較實用,有N個函數調用了這個方法,修改一次搞定)

  Alt+Shift+L 抽取本地變量( 可以直接把一些魔法數字和字符串抽取成一個變量,尤其是多處調用的時候)

  Alt+Shift+F 把Class中的local變量變爲field變量 (比較實用的功能)

  Alt+Shift+I 合併變量(可能這樣說有點不妥Inline)

  Alt+Shift+V 移動函數和變量(不怎麼常用)

  Alt+Shift+Z 重構的後悔藥(Undo)

  編輯

  作用域 功能 快捷鍵

  全局 查找並替換 Ctrl+F

  文本編輯器 查找上一個 Ctrl+Shift+K

  文本編輯器 查找下一個 Ctrl+K

  全局 撤銷 Ctrl+Z

  全局 複製 Ctrl+C

  全局 恢復上一個選擇 Alt+Shift+↓

  全局 剪切 Ctrl+X

  全局 快速修正 Ctrl1+1

  全局 內容輔助 Alt+/

  全局 全部選中 Ctrl+A

  全局 刪除 Delete

  全局 上下文信息 Alt+?

  Alt+Shift+?

  Ctrl+Shift+Space

  Java編輯器 顯示工具提示描述 F2

  Java編輯器 選擇封裝元素 Alt+Shift+↑

  Java編輯器 選擇上一個元素 Alt+Shift+←

  Java編輯器 選擇下一個元素 Alt+Shift+→

  文本編輯器 增量查找 Ctrl+J

  文本編輯器 增量逆向查找 Ctrl+Shift+J

  全局 粘貼 Ctrl+V

  全局 重做 Ctrl+Y

  查看

  作用域 功能 快捷鍵

  全局 放大 Ctrl+=

  全局 縮小 Ctrl+-

  窗口

  作用域 功能 快捷鍵

  全局 激活編輯器 F12

  全局 切換編輯器 Ctrl+Shift+W

  全局 上一個編輯器 Ctrl+Shift+F6

  全局 上一個視圖 Ctrl+Shift+F7

  全局 上一個透視圖 Ctrl+Shift+F8

  全局 下一個編輯器 Ctrl+F6

  全局 下一個視圖 Ctrl+F7

  全局 下一個透視圖 Ctrl+F8

  文本編輯器 顯示標尺上下文菜單 Ctrl+W

  全局 顯示視圖菜單 Ctrl+F10

  全局 顯示系統菜單 Alt+-

  導航

  作用域 功能 快捷鍵

  Java編輯器 打開結構 Ctrl+F3

  全局 打開類型 Ctrl+Shift+T

  全局 打開類型層次結構 F4

  全局 打開聲明 F3

  全局 打開外部javadoc Shift+F2

  全局 打開資源 Ctrl+Shift+R

  全局 後退歷史記錄 Alt+←

  全局 前進歷史記錄 Alt+→

  全局 上一個 Ctrl+,

  全局 下一個 Ctrl+.

  Java編輯器 顯示大綱 Ctrl+O

  全局 在層次結構中打開類型 Ctrl+Shift+H

  全局 轉至匹配的括號 Ctrl+Shift+P

  全局 轉至上一個編輯位置 Ctrl+Q

  Java編輯器 轉至上一個成員 Ctrl+Shift+↑

  Java編輯器 轉至下一個成員 Ctrl+Shift+↓

  文本編輯器 轉至行 Ctrl+L

  搜索

  作用域 功能 快捷鍵

  全局 出現在文件中 Ctrl+Shift+U

  全局 打開搜索對話框 Ctrl+H

  全局 工作區中的聲明 Ctrl+G

  全局 工作區中的引用 Ctrl+Shift+G

  文本編輯

  作用域 功能 快捷鍵

  文本編輯器 改寫切換 Insert

  文本編輯器 上滾行 Ctrl+↑

  文本編輯器 下滾行 Ctrl+↓

  文件

  作用域 功能 快捷鍵

  全局 保存 Ctrl+X

  Ctrl+S

  全局 打印 Ctrl+P

  全局 關閉 Ctrl+F4

  全局 全部保存 Ctrl+Shift+S

  全局 全部關閉 Ctrl+Shift+F4

  全局 屬性 Alt+Enter

  全局 新建 Ctrl+N

  項目

  作用域 功能 快捷鍵

  全局 全部構建 Ctrl+B

  源代碼

  作用域 功能 快捷鍵

  Java編輯器 格式化 Ctrl+Shift+F

  Java編輯器 取消註釋 Ctrl+\

  Java編輯器 註釋 Ctrl+/

  Java編輯器 添加導入 Ctrl+Shift+M

  Java編輯器 組織導入 Ctrl+Shift+O

  Java編輯器 使用try/catch塊來包圍 未設置,太常用了,所以在這裏列出,建議自己設置。

  也可以使用Ctrl+1自動修正。

  運行

  作用域 功能 快捷鍵

  全局 單步返回 F7

  全局 單步跳過 F6

  全局 單步跳入 F5

  全局 單步跳入選擇 Ctrl+F5

  全局 調試上次啓動 F11

  全局 繼續 F8

  全局 使用過濾器單步執行 Shift+F5

  全局 添加/去除斷點 Ctrl+Shift+B

  全局 顯示 Ctrl+D

  全局 運行上次啓動 Ctrl+F11

  全局 運行至行 Ctrl+R

  全局 執行 Ctrl+U

  重構

  作用域 功能 快捷鍵

  全局 撤銷重構 Alt+Shift+Z

  全局 抽取方法 Alt+Shift+M

  全局 抽取局部變量 Alt+Shift+L

  全局 內聯 Alt+Shift+I

  全局 移動 Alt+Shift+V

  全局 重命名 Alt+Shift+R

  全局 重做 Alt+Shift+Y

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章