我只是想从Java虚拟机线程转储全部,看螺纹锁什么,什么的线程在等待解锁一些资源。 喜欢的东西描述在这里 。 我tryed杀死受精卵的过程,但没有结果。
Answer 1:
最简单的方法是用DDMS,或在Eclipse ADT插件。 见http://developer.android.com/tools/debugging/ddms.html的基本说明。 总之,进入设备视图中,选择你感兴趣的应用程序,确保线程更新启用,并切换到线程视图。 您将获得在这个过程中线程的实时更新列表。 在一个线程双击将抓住当前堆栈状态的快照。
你可以使用全选和复制线程转储复制和粘贴的堆栈跟踪。
如果你有一个开发者/扎根设备,你可以问的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线图的优点是,如果线程被卡在监视器上,堆栈转储会给你什么对象被锁定,并且线程当前持有的锁的指示。
受精卵的过程是不是与此有关; 顾名思义它没有运行的应用程序。 因为它不具有JDWP线程,并且不听SIGQUIT,你不能得到一个堆栈跟踪信息也无妨。
Answer 2:
以从该指令的答案 ,并把它所有在一起,这里是下面的脚本。 将其放入dump.sh文件并执行,它会找到所需的PID,创建具有当前时间戳和明年将取回线程转储到一个新的文件。 当一个人有一段很短的时间,以获取转储这个命令非常有用。 使用前,请确保痕迹被放入文件/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")
获得人类可读的时间戳。 它会更容易找到需要的文件。
Answer 3:
只需调试您的手机Android Studio中对您的应用程序; 然后在“调试视图” Alt+5
只是按“相机”按钮,左下角,获得所有踪迹的转储,包括他们持有的锁。
Answer 4:
如果切换到Eclipse中的DDMS视图,你有一些工具来看看线程。 这是你在找什么?
Answer 5:
我猜你需要在应用中的线程。 对于这一点,你可以使用在ADT Eclipse插件的DDMS视图。 这里的文档http://developer.android.com/tools/debugging/ddms.html#thread