簡體   English   中英

你如何調試Android inEclipse

[英]How do you debug Android inEclipse

請嘗試以下方法:

  1. 創建一個HelloWorld應用程序。

  2. 將一條Log語句添加到onCreate的末尾:

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

  2. 在模擬器中運行應用程序並記下它的工作原理並逐步查看Eclipse的LogCat窗口中的Logged條目。

  3. 將HelloWorldActivity更改為從ListActivity而不是Activity擴展。

    \n 公共類HelloWorldActivity擴展ListActivity {\n
  4. 再次在模擬器中運行應用程序並注意它無法訪問Log語句。

我的問題不是為什么會失敗。 我的問題是,您將如何調試此故障? 我在Eclipse Debug窗格中看到的只是一個RuntimeException。 我看到LogCat有一堆消息,但是它很龐大,我已經搜索了它,但找不到任何表明錯誤的地方或我的代碼中發生異常的地方。 我找不到在RuntimeException或堆棧跟蹤中顯示消息的方法,以了解哪行代碼啟動了異常。

我假設必須有更好的方法來使用這些工具來查找錯誤,但我是新手,似乎無法找到更好的調試方法,除了將我編碼的所有內容包裝在try / catch中。 我原本希望在拋出異常時生成的LogCat中找到一條消息。 我希望Debug窗口允許您檢查異常的內容。 我不是說這種技術不存在,我說我很難搞清楚如何調試並詢問存在哪些技術以及如何使用它們?

所以,簡單地說:

  • 如果你還不知道是什么原因,你會怎么發現這個錯誤?
  • 你會用什么技術找出根本原因?
  • 您將如何檢查Exception的詳細信息?
  • 通常,您如何使用Eclipse在Android代碼中發現問題?

歡迎提出多項建議和討論。 :)

我會包含我的LogCat內容,但它太大了,這是不合理的。 你應該能夠輕松地自己重現這個,所以我把它遺漏了。 LogCat中的某些東西可能對我有所幫助,但是因為它甚至運行一個小程序它是如此之大,我需要提示在搜索API調用拋出的異常時如何搜索以及如何解釋它。 我看到其他帖子說明LogCat中應該有什么東西,雖然可能是真的,但我自己找不到任何東西。 如果您認為某些內容應該在LogCat中,請自行運行測試並將這些行復制到我應該找到的響應中。

謝謝。

========

截至目前的摘要技術列表如下:

入侵技術:1。將Toast放置在您希望看到您已執行的代碼位置。 2.將try / catch放在您認為可能拋出異常的代碼中。 3.注釋掉代碼並重新編譯和重新測試。

非侵入性技術:1。使用調試器。 斷點,變量檢查...... 2.猴子壓力測試儀。 3.下載Android源庫。 4.使用LogCat過濾器查看是否列出了“引起的”。

不清楚是否可用:1。調試Android庫的版本,其中包含其他日志記錄,斷言或其他附加幫助。 2.能夠通過Debug窗格或其他技術檢查Eclipse中的Exception。 3.一種定義更全局的try / catch異常處理程序的方法。 4.能夠通過Android庫源代碼進行調試。

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

嘿,無知的問題。 好吧,首先提示,您可以過濾logcat告訴您的內容。 例如,你只需點擊紅色(e)就可以顯示錯誤。 它還會告訴您在調試模式下運行應用程序時發生錯誤的位置。 它可以直接指向您的代碼或android sdk。 知道android包導致錯誤是一個很大的幫助。

這兩個只是浮現在我的腦海里。 希望能幫助到你!

我遇到了同樣的問題,發現了史蒂夫H.的幫助:

發生的情況是,在附加調試器時,在從Debug透視圖中終止應用程序之前,異常日志不會發布到LogCat。 發生這種情況是因為在調試器分離之前,應用程序實際上不會崩潰。 - Steve H 3月31日15:47

------是的,那就做到了。 現在我看到了同樣的例外。 在我讓程序運行完全崩潰和退出過程之后。 當它停止我的程序並顯示IDE調試器屏幕時,它應該顯示該信息。 不要讓我感到疑惑,浪費我的時間更多點擊。 Eclipse還有很長的路要走,它似乎與Visual Studio等競爭。 讓我們希望我的耐心比我的項目更耐用。 感謝您的反饋。 :) - Sebastian Dwornik 3月31日17:35

鏈接問題: Android上的Eclipse調試有什么問題

一般來說,如果有什么東西會引發異常,那么無論如何你都應該適應這種情況,但是設置try / catch塊是找到特定問題的一種不錯的方法。 我發現如果你沒有在catch塊中放置一些內容,那么你就無法在eclipse的watch變量窗口中評估異常。 所以我總是把一個Log調用並在該行上設置一個斷點。

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代碼中拋出錯誤的位置。 我沒有這樣做過。

未通過try / catch捕獲的異常是錯誤並且會破壞程序的正常流程。

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

調試模式的好處是,當發生錯誤時,您的應用程序會在發生錯誤時被凍結。 您可以設置設置斷點,在程序運行時動態更改代碼,這很好(嗯,您不能像更改方法名稱那樣進行重大更改)。

但是,處理android中的錯誤和錯誤的方式可能與.NET有點不同,因為每個模型中的模型都不同。

在編程到Windows時,應用程序就像小島嶼一樣。 您可以直接控制代碼流(即:您可以在用戶輸入一些數據時調用模態對話框來凍結代碼流),並且您只需使用一個線程即可創建一個完全正常運行的程序。 在android中幾乎所有東西都在它自己的同步中運行。 並且您的應用必須准備好處理在執行過程中接聽電話等內容。 因此,您也可以將此模型應用於調試: 錯誤(由於不合適的情況而發生)往往比其他開發環境中的傳播更多 這些錯誤的處理方式也不同:當您意識到您的應用程序在拋出異常后仍然運行時,這一點很明顯。

一些更有用的提示:你有一個非常強大的工具叫做Monkey,這是一種壓力工具,可以生成“用戶事件的偽隨機流,例如點擊,觸摸或手勢,以及許多系統級事件”。

LogCat指示錯誤的“原因”。 該行通常以“引發者”開頭。 如果您對原因而不是后果感興趣,可以進一步過濾錯誤報告,查找“由...引起”。

最后但並非最不重要的是,我找到了一種評論線條的舊方法,看看哪些事情對於解決問題非常有用。

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM