2010-11-25 37 views
6

嘗試以下操作:你如何進行調試的Android inEclipse

  1. 創建HelloWorld應用程序。

  2. 添加日誌語句的onCreate結束:

 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Log.d("HelloWorldActivity.onCreate()", "setContentView() completed"); 
    } 
  1. 放置一個斷點在日誌語句。

  2. 運行仿真器中的應用程序,並注意它的工作原理和步驟,看看在Eclipse的logcat的窗口中的記錄條目。

  3. 更改HelloWorldActivity從ListActivity代替活動的延伸。

     
    public class HelloWorldActivity extends ListActivity { 
    
  4. 再次在模擬器中運行應用程序,並注意它無法達到Log語句。

我的問題是不是爲什麼失敗。我的問題是,你將如何去調試這個失敗?我在Eclipse Debug窗格中看到的是RuntimeException。我看到LogCat有一堆消息,但是它很大,我搜索了它,但是找不到任何東西來指示什麼是錯的,或者在我的代碼中發生異常的地方。我找不到在RuntimeException或堆棧跟蹤內顯示消息的方法,以知道哪一行代碼啓動了異常。

我認爲必須有更好的方式來使用這些工具來發現錯誤,但我是新的,似乎無法找出一個更好的辦法,除了在一個try/catch包裝的一切,我的代碼進行調試。我希望能夠在拋出異常時生成LogCat中的消息。我希望調試窗口允許你檢查異常的內容。我並不是說這些技術不存在,我說我很難算作初學者如何進行調試,並詢問有哪些技術存在,以及如何使用它們?

所以,簡單地說:

  • 你怎麼會發現這個錯誤,如果你還不知道是什麼造成的呢?
  • 你會用什麼技術找出根本原因?
  • 你將如何去檢查例外的細節?
  • 通常,您如何在使用Eclipse的Android代碼中發現問題?

多的建議和討論的歡迎。 :)

我會包括我logcat的內容,但它是如此之大,這是不合理的。你應該可以很容易地自己再現這個,所以我把它排除了。 LogCat中可能有些東西可以幫助我,但是因爲即使運行一個小程序,它也非常大,所以當遇到API調用拋出的異常時,我需要提示如何搜索以及如何解釋它。我看到其他帖子指出LogCat中應該有一些東西,儘管這可能是真的,但我沒有發現任何東西。如果您認爲LogCat中有某些內容,請自行運行測試,並將這些行復制到我應該找到的響應中。

謝謝。

========

摘要技術名單至今如下:

微創技術: 1.將麪包在代碼中的位置,你想看到你,你已經執行。 2.將try/catch代碼放在你認爲可能引發異常的地方。 3.註釋掉代碼並重新編譯並重新測試。

非侵入性技術: 1.使用調試器。斷點,變量檢驗... 2.猴子壓力測試儀。 3.下載Android源碼庫。 4.使用LogCat過濾器查看是否列出「Caused By」。

不明確(如果可用): 1.調試版本的Android庫有額外的日誌記錄,斷言或其他附加幫助。 2.能夠通過調試窗格或其他技術檢查Eclipse中的異常。 3.一種定義更全局的try/catch異常處理程序的方法。 4.能夠通過Android庫源代碼進行調試。

不可用: 1.一種非侵入性的方式來查看一個異常或異常發生的位置的內容。

+0

對於檢查異常的詳細信息我經常使用的表達窗口在調試模式(窗口>顯示視圖>表達式)檢查值。當檢查異常爲exception.getMesage()並不總是返回一個消息(即null)時,這很方便。在Debug模式下,在斷點處右鍵單擊變量並選擇「watch」。你必須跨過例外來觀看它。 – Emile 2010-11-26 14:24:20

+0

eclipse中的Problems窗口會顯示預編譯時間錯誤以及嚴格警告。 (窗口>顯示視圖>其他...問題) – Emile 2010-11-26 14:25:56

+0

LogCat首先錯過領先。該過濾器適用於消息,而不是您的日誌標籤。要創建自定義過濾器,您應該使用LogCat菜單並選擇「創建過濾器」選項。在這裏,您可以通過標記和PID進行過濾,從而爲您提供更細緻的控制。它也出現在標籤窗口中。非常有用隱藏系統事件。這些消息現在真的幫助了最後的工作,但可能不會告訴你錯誤。所以輕彈回來顯示所有系統事件。 (或通過PID記錄) – Emile 2010-11-26 14:31:01

回答

2

哎, Ineresting問題。那麼,第一個技巧,你可以過濾logcat告訴你什麼。例如,您只需通過點擊紅色(e)來顯示錯誤。 它還會告訴您如果在調試模式下運行應用程序時發生錯誤的位置。它可以直接指向你的代碼或android sdk。知道android包導致錯誤是一個很大的幫助。

這兩個剛進入我的腦海。希望能幫助到你!

+0

是的,紅色(E)似乎過濾,所以這是一個很大的幫助。你碰巧知道例外是否應該記錄(e)恐怖,警告,信息?由於我沒有看到,我不確定它應該是什麼樣子。如果是(e)恐怖,你的建議會大大減少信息的數量。 – user405821 2010-11-25 23:00:48

0

一般來說如果有的話拋出一個異常,那麼你或許應該迎合這種情況,無論如何,然而把try/catch塊是找到特定問題的一個體面的方式。 我發現如果你不把東西放在catch塊中,那麼你不能在eclipse的watch variables窗口中評估異常。所以我總是把一個日誌調用,並在該行上設置一個斷點。

public void onCreate(Bundle savedInstanceState) { 
    try{ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    }catch(Exception exception) 
    { 
     // put break point on line below so you can evaluate exception in debug mode. 
     Log.e(TAG, "Set content exception "+ exception.getMessage()); 
     // note some exceptions return null on getMessage(); 
    } 
    Log.d("HelloWorldActivity.onCreate()", "setContentView() completed"); 
} 

所以,如果你的堆棧跟蹤是巨大的,那麼這將有所幫助。其他開發人員也發現,獲取sdk的源代碼意味着您可以查看錯誤在主sdk代碼中的位置。但我沒有這樣做。

0

try/catch沒有捕獲到的異常是錯誤,並打破了程序的正常流程。

在調試模式下運行只需單擊錯誤按鈕。我不知道是否有任何「特殊」調試庫。但是在使用android時,所有的「庫」都是開源的,所以你幾乎可以查看任何東西。

約調試模式的好處是,當錯誤發生時,您的應用程序被凍結就在冷宮時發生錯誤。您可以設置設置的斷點,在程序運行時隨時更改您的代碼,這非常棒(呃,您不能像更改方法名稱那樣進行劇烈的更改)。

然而,您在Android中處理錯誤和錯誤的方式可能與.NET稍有不同,因爲每個模型都是不同的。

當編程到Windows時,應用程序像小島一樣工作。您可以直接控制代碼流(例如,您可以調用模式對話框來凍結代碼流,同時用戶輸入一些數據),並且只需使用一個線程即可完成一個功能完整的程序。在android中,幾乎所有東西都運行在它自己的同步中。而且你的應用程序必須準備好處理一些事情,比如在執行過程中接到電話。因此,您可以將此模型應用於調試:Errors (that happen due to unforsen circumstances) tend to propagate much more than in other development ambient。處理這些錯誤的方式也不同:當您意識到應用程序在拋出異常後仍然運行時,這一點很明顯。

一些更有益的提示: 你有一個叫猴子非常強大的工具,應力工具,可生成「用戶事件,比如點擊,觸摸,或手勢,以及一些系統 - 的僞隨機流級別事件「。

LogCat指示您錯誤的「原因」。該行通常以Caused By開頭。如果您對原因感興趣而非後果,則可以進一步過濾錯誤報告以查找「由...引起」。

最後但並非最不重要的一點,我找到了評論線條的舊方法,看看發生什麼事情非常有用。

希望它有助於

1

我也陷入了同樣的問題,史蒂夫·H.,幫助了發現:

什麼情況是,當調試 連接,異常日誌請勿將 發佈到LogCat,直到 從 終止Debug窗口。發生這種情況 ,因爲應用程序不會 實際上崩潰,直到調試器 分離。 - 史蒂夫H 3月31日15:47

------是的,這樣做。現在我看到了同樣的例外。在我讓 程序運行完整崩潰 並退出進程。當它停止我的程序時,它應該顯示 ,並且 會顯示IDE調試器屏幕。 不要離開我想知道並浪費我的 時間與更多的點擊。 Eclipse有很長的路要走,它似乎 與Visual 工作室喜歡競爭。讓我們希望我的耐心 超過我的項目。感謝 反饋。 :) - 塞巴斯蒂安Dwornik月 31日17:35

鏈接問題:What's wrong with debugging in Eclipse on Android?