Android除錯方法大全

2021-06-04 23:44:48 字數 3686 閱讀 1155

**:

寫**是每個程式設計師最樂意做的事,然而在開發中也會遇到很多令程式設計師很頭疼的事情。如果說讓程式設計師最頭疼的事情是看到無數bug、軟體的發布遙遙無期,那麼讓程式設計師最最頭疼的事情是程式在除錯狀態下沒有問題然而在實際執行中確有問題。

除錯程式是每個程式設計師工作中必不可少的部分,而且可以毫不誇張地說除錯程式占用了程式設計師50%的工作時間。由此可見,除錯程式是每個程式設計師必不可少的技術,除錯水平的高低決定了程式設計師水平的高低。

在開發android程式前,有必要總結下如何除錯android程式。

目前就開發過程中,常用除錯程式的方法總結如下:

1.使用eclipse開發平台除錯;

2.結合android  sdk除錯;

3.使用junit除錯;

使用eclipse開發平台除錯

這是使用eclipse工具開發android必須熟練掌握的除錯技術,主要包括:設定斷點、檢視變數值、檢視當前堆疊等。開啟eclipse工具,單擊「run」

以及在除錯的過程中,開啟其他除錯面板,相信只要使用一次就完全明白了。不要小瞧這些除錯工具,只要你細心,說不定其他同事好幾天沒有解決的bug,你通過這些工具就發現了。所以熟練使用這些工具,是開發人員必須的,在有些時候甚至可以事半功倍的效果。

結合android sdk除錯

在複雜的程式執行過程中,如何除錯程式了?把程式執行過程的資訊儲存為檔案或者輸出到ide中,這樣就可以知道程式是否是正常執行了。

在android中可以使用log類,log類在android.util包中,可以使用它將執行過程的資訊輸出到ide中,直接檢視程式執行的過程。log 類提供了若干靜態方法 :

log.v(string tag, string msg); log.d(string tag, string msg); log.i(string tag, string msg); log.w(string tag, string msg); log.e(string tag, string msg);

分別對應 verbose,debug,info,warning,error。 tag是乙個標識,可以是任意字串,通常可以使用類名+方法名,主要是用來在檢視日誌時提供乙個篩選條件。程式執行後,在show view中選擇locat就可以直接看到輸出了。也可以在程式執行後,可以通過ddms 檢視程式的執行過程記錄,並可以通過string tag來過濾輸出的資訊,關於android ddms如何使用,請閱讀android ddms使用詳細說明。

除了以上方法外,我們也可以把程式執行過程資訊的輸出當作程式執行的一部分,比如使用toast notificatio將輸出資訊顯示在介面中,當然這些只是些除錯**,在發布程式時需要去掉。

最後一種方法,也是最有效的一種方法,直接將執行過程的資訊以檔案的方式儲存,在程式執行後開啟檔案,檢視輸出的資訊。在一些複雜的工具中,都是用這種日誌檔案的方法來記錄檔案執行的過程。如何在android中讀寫檔案,請閱讀android資料儲存(總結篇)。

看了以上2種方法是否覺得:以上只是在發現問題後找到問題的原因,解決問題,是不是有些被動的、消極的,有沒有其他有效的方法來避免bug?看到這裡,有些「牛」人就說了:我寫的**幾乎沒有bug,我的**好幾年都沒有發生過崩潰現象了。從我個人的觀點說:的確牛。至少我自己,感覺自己的**似乎很脆弱,要想寫乙個完全正確的**真的不容易。自己考慮了很多,為什麼會這樣,難道是自己寫的**的確很差?至少我自己在寫**的過程中都是很仔細的,盡量把問題考慮清楚了在寫的,每次修改都是小心翼翼的!後來發現,每段**在寫的時候都是有一些「執行環境」的,在後來使用的過程中,這個環境逐漸被破壞,以致最後修改的亂七八糟。如果你也有同受,建議你仔細閱讀以下說明!

使用junit除錯

android增加了對junit的支援,這對程式設計師來說,是個很好訊息。

首先說明下junit是用來解決什麼問題的?junit是採用測試驅動開發的方式,也就是說在開發前先寫好測試**,主要用來說明被測試的**會被如何使用,錯誤處理等;然後開始寫**,並在測試**中逐步測試這些**,直到最後在測試**中完全通過。

看了是否感覺有些不符合程式設計師的思維習慣(先寫**然後在除錯),的確這也是junit是對程式設計師思維的「顛覆」。在這裡我自己也感覺,好像很難做到,為什麼?在一匹「馬」沒有完全設計好前,怎麼規定這匹「馬」將來會如何跑?而且即使把「馬」將來會如何「跑」定義好了,在實現的時候「馬」被改變了怎麼辦?說到底還是:乙個人不能同時具有2個角色,否則自己有時候就不知道當前是哪個角色!

說到這裡,我就說明下,我自己對junit 「錯誤」的使用方法,這也許與junit測試驅動開發的目的相矛盾,但是的確可以有效地減少bug。junit從核心來說就是將源**與測試**完全分開,將測試**作為乙個單獨的程式。前面介紹的方法,都將源**與測試**合為一體,由於源**的重要性大於測試**的重要性,所以測試**經常有不完整、結構不清晰等問題,這樣程式設計師的單元測試也就不完整。junit就是被我用來做完整的單元測試,對當前的部分**,測試其在每種「環境」下的執行結果。

現簡要說下junit的幾個主要功能:

1.  junit首先有管理測試用例的功能。修改了哪些**,這些**的修改會對哪些部分有影響,通過junit將這次的修改做個完整測試。這也就junit中所謂的testsuite。

2.  如何定義需要測試的**?這也就是junit中所謂的testcase,根據源**的測試需要定義每個testcase,並將testcase新增到相應的testsuite方便管理。

3.  如何定義測試的「環境」?在testcase測試前會先呼叫「環境」配置,在測試中使用,當然也可以在直接測試用例中定義測試「環境」。

4.  最為重要的部分,測試結果的檢測。對於每種正常、異常情況下的測試,執行結果是什麼、結果是否是我們預期的等都需要有個明確的定義,junit在這方面提供了強大的功能。

以上部分與我們平常使用ide除錯的過程是完全一樣的,只不過是增加了測試用例管理、測試結果檢測等功能,提高了單元的效率,保證了單元測試的完整性,明確了單元測試的目標。帶著以上4個問題,簡要舉例並分析如下:

源**如下:

public class samplecalculator public int subtration(int minuend , int subtrahend) } 測試**(testcase)如下: import junit.framework.testcase; public class testsample extends testcase public void testsubtration() }

以上testsample測試用例中就對samplecalculator進行了完整的單元測試,並對測試結果做了預期說明。當然還需要將testsample增加到testcase中方便管理。

import junit.framework.test; import junit.framework.testsuite; public class testall }

以上就將testsample增加到」testsuite test」中,將來在選擇測試用例的過程中只要選擇了testsuite test,testsample就將加入當前測試中。如果將來samplecalculator增加了其他功能,只需要在testsample增加相應的測試,就可以對testsample進行完整單元測試。

總結說明

以上是在工作中總結的**除錯的方法,並結合android應用程式開發,為將來深入開發android應用程式打好堅實的基礎。

再次總結說明

分享到:

android 工程除錯方法

廢話不多說,直接來幾種除錯模式,給大家,看看你用過沒!第一種,也就是寫乙個全域性的log方法,並傳乙個布林引數,true 列印 false 不列印。這樣發布apk 的時候,所有的涉及到log的部分都可以去掉,相信很多人都這麼用的。第二種,是debug。這也是在工程感覺資料不對,或者 沒有執行的時候操...

Android基本除錯方法

一.eclipse模擬器的除錯 1.基本方法 斷點 單步 快捷鍵與vc有差別 debug f11 加斷點 shift ctrl b step into f5 step over f6 resume f8 可以選擇裝置,模擬器和真機都可以使用 2.高階 ddms使用 功能強大 可以進行手機螢幕截圖 檢...

android除錯工具adb命令大全

一 adb介紹 sdk的tools資料夾下包含著android模擬器操作的重要命令adb,adb的全稱為 android debug bridge就是除錯橋的作用。通過adb我們可以在eclipse中方面通過ddms來除錯android程式。借助這個工具,我們可以管理裝置或手機模擬器的狀態。還可以進...