2012-11-27 47 views

回答

-1

如果您在Eclipse中切換到DDMS視圖,您可以使用一些工具來查看線程。那是你在找什麼?

+0

差不多是的。我還沒有知道對象被鎖定了什麼,例如: - 鎖定<0x0000000780b7e688>(a java.io.InputStreamReader) – Divano

+0

由於沒有Eclipse,所以此答案已過時。 –

-1

我猜你需要應用程序中的線程。爲此,您可以使用ADT eclipse插件上的DDMS視圖。這裏是文檔http://developer.android.com/tools/debugging/ddms.html#thread

+0

差不多是的。我還不知道對象是什麼鎖定的,例如: - locked <0x0000000780b7e688>(a java.io.InputStreamReader) – Divano

+0

Eclipse和DDMS已棄用,Android Profiler將不顯示任何內容。請閱讀下面的答案。 –

12

最簡單的方法是使用DDMS或Eclipse中的ADT插件。有關基本說明,請參見http://developer.android.com/tools/debugging/ddms.html。簡而言之,進入設備視圖,選擇您感興趣的應用程序,確保線程更新已啓用,然後切換到線程視圖。您將在該過程中獲得實時更新的線程列表。雙擊線程將抓取當前堆棧狀態的快照。

您可以使用select-all並複製線程轉儲以複製&粘貼堆棧跟蹤。

如果你有一個開發者/ root權限的設備,你可以問的Dalvik虛擬機通過發送SIGQUIT的應用過程中,你有興趣來轉儲線程堆棧。舉例來說,如果你想看到所有線程的堆棧在日曆應用程序,你可以做這樣的事情:

% adb shell ps | grep android.calendar 
u0_a6  2596 127 912804 48296 ffffffff b6f62c10 S com.google.android.calendar 
# 2596 is the process ID 
% adb shell run-as com.google.android.colendar kill -3 2596 

的logcat的輸出會這樣說:

I/dalvikvm(2596): Wrote stack traces to '/data/anr/traces.txt' 

所以,扳指:

% adb pull /data/anr/traces.txt . 

每次發出進程信號時,都會將日誌附加到該文件。可能還有其他的東西在裏面,所以你需要尋找pid 2596

----- pid 2596 at 2012-11-27 12:48:38 ----- 
Cmd line: com.google.android.calendar 

DALVIK THREADS: 
... 

這樣在DDMS線圖的優點是,如果線程被卡在監視器上,堆棧轉儲會給你指示什麼對象被鎖定,哪個線程當前持有鎖。

zygote過程在這裏不相關;根據定義它沒有運行一個應用程序。由於它沒有JDWP線程,並且不偵聽SIGQUIT,所以無論如何您都無法獲取堆棧跟蹤。

+0

注意:我在/data/anr/traces.txt.bugreport找到了我的蹤跡 –

+0

有更簡單的方法,請閱讀以下內容。 –

1

接受answer的命令,並將它們放在一起,下面是腳本。把它放到dump.sh文件中並執行,它會找到所需的PID,用當前的時間戳創建一個新文件,接下來它將把Thread-Dump存入它。 當有一個非常短的時間來獲取轉儲時,此命令可能很有用。 在使用之前,請確保將跟蹤放入文件/data/anr/traces.txt或在腳本中替換此值。

#!/bin/sh 

pid=`./adb shell ps | grep android.calendar | awk '{print $2}'` 
echo $pid 
f=$(date +%s%N) 
echo $f 
./adb shell run-as com.google.android.calendar kill -3 $pid 
./adb pull /data/anr/traces.txt $f 

作爲替代文件名,可以使用f=$(date +"%T.%6N")讓人類可讀的時間戳。找到所需的文件會更容易。

+0

有更簡單的方法,請閱讀下面的答案。 –

+0

有時你不能使用斷點。對於這些情況你使用這個腳本。 –

0

只需在Android Studio中在手機上調試您的應用程序;然後在「調試視圖」Alt+5中,只需按下左下角的「攝像頭」按鈕即可獲取所有堆棧軌跡的轉儲,包括它們所持有的鎖定。