java thread dump_如何在Android中制作Java Thread Dump?

本文介绍了如何使用DDMS和Eclipse的ADT插件实时监控和分析Android应用的线程状态。通过设备视图选择应用,启用线程更新,切换到线程视图可以获取线程列表,双击线程获取堆栈快照。此外,通过向应用进程发送SIGQUIT信号,可以从DalvikVM获取线程堆栈转储,进一步分析应用的运行情况。这种方法特别适用于检测线程卡死和锁竞争问题。
摘要由CSDN通过智能技术生成

最简单的方法是使用DDMS,或Eclipse中的ADT插件.有关基本说明,请参阅

http://developer.android.com/tools/debugging/ddms.html.简而言之,进入“设备”视图,选择您感兴趣的应用程序,确保启用了线程更新,然后切换到“线程”视图.您将在该过程中获得实时更新的线程列表.双击线程将获取当前堆栈状态的快照.

您可以在线程转储中使用select-all和copy来复制&粘贴堆栈跟踪.

如果您有开发人员/ root用户设备,可以通过向您感兴趣的应用程序进程发送SIGQUIT来要求Dalvik VM转储线程堆栈.例如,如果您想查看Calendar应用程序中所有线程的堆栈,你可以做这样的事情:

% 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,因此无论如何都无法从中获取堆栈跟踪.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值