gpt4 book ai didi

java - 如何调试 ANR

转载 作者:行者123 更新时间:2023-11-30 10:55:55 34 4
gpt4 key购买 nike

我在调试我的应用程序时遇到问题。这是一个数据收集应用程序,每个“作业”大约需要 15 分钟才能完成,其中快速连续完成多个作业是一个正常用例。

我看到的症状如下:

应用程序运行 20 到 90 分钟后,应用程序会显示一条 ANR 消息。我说 20 到 90 之间是因为 ANR 出现的时间是可变的;有时它会在第二份作业中弹出,有时您可以在它弹出之前进入作业 8。

一旦 ANR 出现,我选择“等待”并且对话框被关闭,所以我继续工作......现在每 5 分钟(没有失败!)ANR 不断重新出现。每次我选择“等待”,5 分钟后它又回来了。

我的应用程序中没有按 5 分钟计划触发的 postDelayed 或 AlarmManager 或 TimerTask。 ANR 消息特别指出“SHADE 没有响应”,我的应用名为 SHADE,因此 Android 肯定认为是我的应用导致了问题。

我已按照建议打开 StrictMode,但无济于事,日志在 ANR 发生时附近没有任何违反 StrictMode 的情况。

10-16 17:11:28.390 D/StrictMode(29898): StrictMode policy violation; ~duration=8 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=2335 violation=1
10-16 17:14:09.180 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService
10-16 17:19:22.560 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService
10-16 17:24:30.010 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService
10-16 17:29:39.860 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService
10-16 17:34:46.860 D/CrashAnrDetector( 869): Subject: Executing service com.ancoris.shade/.ShadeService

最后一次违规发生在 ANR 之前。而且我不确定还有什么其他方法可以确定导致 ANR 发生的原因。

我只能在目标设备上重现该问题:三星 Galaxy Tab Active 4 16GB

samsung/rubensltexx/rubenslte:4.4.4/KTU84P/T365XXU1AOA3:user/release-keys

该问题不会出现在 Nexus 7 或 Nexus 9(均运行 5.1.1)上。

更新:好的,所以我使用 DDMS 获取方法配置文件,下面的文件是在大约 10 分钟的时间内捕获的,其中一条 ANR 消息显示在中途,然后在最后再次显示,两次我都按下“等待”消息。

配置文件似乎根本没有提及我的任何 com.ancoris.shade 文件或方法。

https://drive.google.com/file/d/0B8JuL0rVSQEKZUJPYmFIR3dDMkE/view?usp=sharing

更新 2:

我刚刚在其中一个日志 (data/anr/traces.tx) 中看到了这一点。这是正常的还是这是我的问题的原因?如果是,当堆栈跟踪中甚至没有提到我的代码时,我应该如何调试这样的东西?

"main" prio=5 tid=1 SUSPENDED
| group="main" sCount=1 dsCount=0 obj=0x4188cea0 self=0x4177c008
| sysTid=16094 nice=0 sched=0/0 cgrp=apps handle=1074479444
| state=S schedstat=( 0 0 0 ) utm=8522 stm=1572 core=0
at android.widget.TextView.restartMarqueeIfNeeded(TextView.java:~5762)
at android.widget.TextView.onDraw(TextView.java:6474)
at android.view.View.draw(View.java:15551)
at android.view.View.draw(View.java:15436)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15554)
at android.widget.FrameLayout.draw(FrameLayout.java:472)
at android.widget.ScrollView.draw(ScrollView.java:2418)
at android.view.View.draw(View.java:15436)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15434)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15554)
at com.android.internal.widget.ActionBarOverlayLayout.draw(ActionBarOverlayLayout.java:471)
at android.view.View.draw(View.java:15436)
at android.view.ViewGroup.drawChild(ViewGroup.java:3366)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3202)
at android.view.View.draw(View.java:15554)
at android.widget.FrameLayout.draw(FrameLayout.java:472)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2623)
at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2956)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2869)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2707)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2275)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1297)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6775)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
at android.view.Choreographer.doCallbacks(Choreographer.java:613)
at android.view.Choreographer.doFrame(Choreographer.java:583)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5756)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

分析是通过在您的应用程序中的某处添加 2 个方法调用来完成的,当您使用分析运行您的应用程序时会生成一个 .trace 文件。

要添加的代码:Debug.startMethodTracing("profileName");//放在你想开始分析的地方,即。应用程序.onCreate

Debug.stopMethodTracing();//把它放在你希望跟踪结束的地方

运行您的应用(在分析时它会运行得相当慢。

当应用程序已经超过您停止配置文件的点后,转到终端并运行

adb pull/sdcard/profileName.trace

打开Android Device Monitor(在Studio中:tools->Android->Android Device Monitor)

文件打开轨迹

观察轨迹,单击一行将允许您深入了解子调用,这将有助于识别减速。

关于java - 如何调试 ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33175826/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com