【问题标题】:ANR crash after a few seconds when stopping at breakpoint in main thread (AOSP - RK3288 box)在主线程中的断点处停止几秒钟后 ANR 崩溃(AOSP - RK3288 框)
【发布时间】:2026-02-07 12:35:01
【问题描述】:

我有一个 RK3288 盒子,我正在为此开发一个应用程序。

我遇到了一个让我很头疼的问题。我无法调试任何东西。
每次我附加调试器时,当我遇到主线程上的断点时,我的应用程序会在几秒钟后崩溃。 以下是发生这种情况时的 logcat:

05-02 20:52:39.734 459-534/system_process I/InputDispatcher: Application is not responding: Window{3026b626 u0 com.kushtrim.playground/com.kushtrim.playground.MainActivity}.  It has been 5001.8ms since event, 5001.6ms since wait started.  Reason: Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 17.  Wait queue head age: 5505.1ms.
05-02 20:52:39.794 459-534/system_process I/WindowManagerService: Input event dispatching timed out sending to com.kushtrim.playground/com.kushtrim.playground.MainActivity.  Reason: Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 17.  Wait queue head age: 5505.1ms.
05-02 20:52:39.811 459-482/system_process I/Process: Sending signal. PID: 8790 SIG: 3
05-02 20:52:39.812 8790-8799/com.kushtrim.playground I/art: Thread[5,tid=8799,WaitingInMainSignalCatcherLoop,Thread*=0xb7294b58,peer=0x12c000a0,"Signal Catcher"]: reacting to signal 3
05-02 20:52:39.970 459-482/system_process I/Process: Sending signal. PID: 459 SIG: 3
05-02 20:52:39.970 459-468/system_process I/art: Thread[5,tid=468,WaitingInMainSignalCatcherLoop,Thread*=0xb7113410,peer=0x12c020a0,"Signal Catcher"]: reacting to signal 3
05-02 20:52:39.970 8790-8799/com.kushtrim.playground I/art: Wrote stack traces to '/data/anr/traces.txt'
05-02 20:52:40.123 459-478/system_process E/SensorsHal: poll() failed (Interrupted system call)
05-02 20:52:40.824 459-981/system_process E/WifiHAL: Error polling socket
05-02 20:52:40.900 6611-6661/com.solaborate.hello D/Webrtc_calls: SocketIoStatus conected: true , socketId: 9U55YZnsB0EeSDcHACui
05-02 20:52:41.018 459-482/system_process I/Process: Sending signal. PID: 852 SIG: 3
05-02 20:52:41.019 852-864/com.android.phone I/art: Thread[5,tid=864,WaitingInMainSignalCatcherLoop,Thread*=0xb7113410,peer=0x12c000a0,"Signal Catcher"]: reacting to signal 3
05-02 20:52:41.023 459-1442/system_process W/ActivityManagerService: Missing app error report, app = com.kushtrim.playground crashing = false notResponding = true
05-02 20:52:41.028 459-468/system_process I/art: Wrote stack traces to '/data/anr/traces.txt'
05-02 20:52:41.028 459-482/system_process I/Process: Sending signal. PID: 811 SIG: 3
05-02 20:52:41.029 811-820/com.android.inputmethod.latin I/art: Thread[5,tid=820,WaitingInMainSignalCatcherLoop,Thread*=0xb7112928,peer=0x12c000a0,"Signal Catcher"]: reacting to signal 3
05-02 20:52:41.152 811-820/com.android.inputmethod.latin I/art: Wrote stack traces to '/data/anr/traces.txt'
05-02 20:52:41.152 459-482/system_process I/Process: Sending signal. PID: 628 SIG: 3
05-02 20:52:41.152 628-636/com.android.systemui I/art: Thread[5,tid=636,WaitingInMainSignalCatcherLoop,Thread*=0xb7112928,peer=0x12c000a0,"Signal Catcher"]: reacting to signal 3
05-02 20:52:41.209 852-864/com.android.phone I/art: Wrote stack traces to '/data/anr/traces.txt'
05-02 20:52:41.209 459-482/system_process I/Process: Sending signal. PID: 712 SIG: 3
05-02 20:52:41.209 712-719/com.cghs.stresstest I/art: Thread[5,tid=719,WaitingInMainSignalCatcherLoop,Thread*=0xb7112a18,peer=0x12c000a0,"Signal Catcher"]: reacting to signal 3
05-02 20:52:41.286 712-719/com.cghs.stresstest I/art: Wrote stack traces to '/data/anr/traces.txt'
05-02 20:52:41.286 459-482/system_process I/Process: Sending signal. PID: 591 SIG: 3
05-02 20:52:41.286 591-600/android.process.media I/art: Thread[5,tid=600,WaitingInMainSignalCatcherLoop,Thread*=0xb7112928,peer=0x12c000a0,"Signal Catcher"]: reacting to signal 3
05-02 20:52:41.313 628-636/com.android.systemui I/art: Wrote stack traces to '/data/anr/traces.txt'
05-02 20:52:41.396 591-600/android.process.media I/art: Wrote stack traces to '/data/anr/traces.txt'
05-02 20:52:41.554 459-913/system_process W/ActivityManagerService: Missing app error report, app = com.kushtrim.playground crashing = false notResponding = true
05-02 20:52:42.094 459-944/system_process W/ActivityManagerService: Missing app error report, app = com.kushtrim.playground crashing = false notResponding = true
05-02 20:52:43.304 459-1982/system_process W/ActivityManagerService: Missing app error report, app = com.kushtrim.playground crashing = false notResponding = true
05-02 20:52:43.869 459-482/system_process I/art: Explicit concurrent mark sweep GC freed 58037(3MB) AllocSpace objects, 10(257KB) LOS objects, 33% free, 19MB/28MB, paused 811us total 53.345ms
05-02 20:52:43.883 459-482/system_process W/ProcessCpuTracker: Skipping unknown process pid 9185
05-02 20:52:44.189 459-4388/system_process W/ActivityManagerService: Missing app error report, app = com.kushtrim.playground crashing = false notResponding = true
05-02 20:52:44.418 459-482/system_process I/Process: Sending signal. PID: 1155 SIG: 3
05-02 20:52:44.418 1155-1164/com.waxrain.airplaydmr I/art: Thread[5,tid=1164,WaitingInMainSignalCatcherLoop,Thread*=0xb7112928,peer=0x32c070a0,"Signal Catcher"]: reacting to signal 3
05-02 20:52:44.540 1155-1164/com.waxrain.airplaydmr I/art: Wrote stack traces to '/data/anr/traces.txt'
05-02 20:52:44.549 459-482/system_process E/ActivityManagerService: ANR in com.kushtrim.playground (com.kushtrim.playground/.MainActivity)
                                                                    PID: 8790
                                                                    Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 17.  Wait queue head age: 5505.1ms.)
                                                                    Load: 1.48 / 1.36 / 1.86
                                                                    CPU usage from 567ms to -4733ms ago:
                                                                      31% 459/system_server: 14% user + 17% kernel / faults: 6486 minor 5 major
                                                                      0% 164/debuggerd: 0% user + 0% kernel / faults: 3474 minor 5 major
                                                                      8.6% 161/surfaceflinger: 5.6% user + 3% kernel / faults: 629 minor
                                                                      0% 852/com.android.phone: 0% user + 0% kernel / faults: 2463 minor
                                                                      2.8% 8790/com.kushtrim.playground: 1.1% user + 1.7% kernel / faults: 1497 minor
                                                                      0.6% 628/com.android.systemui: 0.3% user + 0.2% kernel / faults: 1800 minor 2 major
                                                                      0% 811/com.android.inputmethod.latin: 0% user + 0% kernel / faults: 2089 minor
                                                                      2.2% 1155/com.waxrain.airplaydmr: 1.5% user + 0.7% kernel / faults: 1754 minor
                                                                      2% 174/adbd: 0.1% user + 1.8% kernel / faults: 564 minor
                                                                      0% 591/android.process.media: 0% user + 0% kernel / faults: 2149 minor 1 major
                                                                      0% 712/com.cghs.stresstest: 0% user + 0% kernel / faults: 1984 minor
                                                                      0.9% 69/cfinteractive: 0% user + 0.9% kernel
                                                                      0.5% 153/dhd_dpc: 0% user + 0.5% kernel
                                                                      0.5% 155/logd: 0.3% user + 0.1% kernel
                                                                      0.3% 68/rk-fb: 0% user + 0.3% kernel
                                                                      0.3% 152/dhd_watchdog_th: 0% user + 0.3% kernel
                                                                      0.1% 8/rcu_preempt: 0% user + 0.1% kernel
                                                                      0.1% 14/ksoftirqd/1: 0% user + 0.1% kernel
                                                                      0.1% 19/ksoftirqd/2: 0% user + 0.1% kernel
                                                                      0.1% 24/ksoftirqd/3: 0% user + 0.1% kernel
                                                                      0.1% 67/fb-vsync: 0% user + 0.1% kernel
                                                                      0.1% 110/mmcqd/0: 0% user + 0.1% kernel
                                                                      0.1% 122/irq/198-mma8452: 0% user + 0.1% kernel
                                                                      0.1% 507/mediaserver: 0% user + 0.1% kernel / faults: 12 minor
                                                                      0% 1174/com.android.settings: 0% user + 0% kernel / faults: 22 minor
                                                                      0.1% 1252/wdog2: 0% user + 0.1% kernel
                                                                      0.1% 1486/com.skype.raider: 0.1% user + 0% kernel / faults: 6 minor
                                                                      0.1% 2355/com.tencent.mm:push: 0% user + 0.1% kernel / faults: 331 minor
                                                                      0.1% 4835/wpa_supplicant: 0% user + 0.1% kernel
                                                                      0.1% 6611/com.solaborate.hello: 0.1% user + 0% kernel / faults: 12 minor
                                                                      0% 7891/kworker/2:2: 0% user + 0% kernel
                                                                      0.1% 7974/kworker/0:1: 0% user + 0.1% kernel
                                                                      0.1% 8875/logcat: 0.1% user + 0% kernel
                                                                     +0% 9168/kworker/u8:4: 0% user + 0% kernel
                                                                    19% TOTAL: 8.1% user + 11% kernel + 0.3% iowait + 0% softirq
                                                                    CPU usage from 4062ms to 4577ms later:
                                                                      7.6% 459/system_server: 3.8% user + 3.8% kernel / faults: 27 minor
                                                                        3.8% 482/ActivityManager: 1.9% user + 1.9% kernel
                                                                        1.9% 487/android.display: 1.9% user + 0% kernel
                                                                      5.7% 161/surfaceflinger: 1.9% user + 3.8% kernel / faults: 14 minor
                                                                        1.9% 161/surfaceflinger: 1.9% user + 0% kernel
                                                                        1.9% 314/DispSync: 0% user + 1.9% kernel
                                                                        1.9% 433/surfaceflinger: 0% user + 1.9% kernel
                                                                        1.9% 552/Binder_4: 1.9% user + 0% kernel
                                                                      1.3% 14/ksoftirqd/1: 0% user + 1.3% kernel
                                                                      1.3% 19/ksoftirqd/2: 0% user + 1.3% kernel
                                                                      1.4% 153/dhd_dpc: 0% user + 1.4% kernel
                                                                      1.4% 174/adbd: 0% user + 1.4% kernel / faults: 60 minor
                                                                        1.4% 174/adbd: 1.4% user + 0% kernel
                                                                      1.5% 1155/com.waxrain.airplaydmr: 1.5% user + 0% kernel
                                                                    6.4% TOTAL: 2.4% user + 3.9% kernel

现在,我自己做了一些研究,发现在正常情况下ANR is triggered when there is no response to a touch event for more than 5s,这似乎就是这里发生的事情。

虽然这对于应用程序的正常运行来说是可以的,但如果我在按钮 OnClickListener 上放置断点,则不应该发生这种情况,但在我的情况下确实如此。

这不会发生在我的任何其他手机上,只是在这个板上。

我能做些什么来解决这个问题,并最终和平调试?

我应该提一下,我也有操作系统代码(AOSP + 内核),并且我自己编译/安装了它,所以如果需要我可以修改操作系统。

如果有帮助,这里是 ANR 跟踪:https://pastebin.com/C3dh9rzK

编辑:
似乎这不是应用程序的问题,而是操作系统中的问题。 我能够在一个全新的项目中重现崩溃,我只是在其中添加了一个按钮和一个 OnClickListener。然后我在侦听器中放置一个断点,附加调试器并单击按钮。 KA-BOOOM。

【问题讨论】:

  • 将您真正需要调试的部分移动到 AsyncTask 是否有意义,只是为了调试它?或者,使用 Handler.post(Runnable) 分离代码部分并按顺序执行它们,以便主线程可以在两者之间喘口气? (在这种情况下,您必须设置多个断点)
  • @SirKnigget 是的,这是我想到的解决方法,并且使用了一些时间。我正在寻找更持久的解决方案。
  • 您是否尝试使用android.os.Debug.waitForDebugger() 并在此之后插入断点?
  • @HarisQureshi 没有变化。应用程序仍然崩溃。
  • 你能在这里描述一下MainActivity.java (com.kushtrim.playground/.MainActivity)吗?

标签: android debugging android-source android-anr-dialog


【解决方案1】:

有史以来最奇怪的事情,我不敢相信我以前怎么没有发现这一点。如果我使用运行应用程序并附加调试器的 "Debug app" 按钮从 Android Studio 运行应用程序,它不会因 ANR 而崩溃。如果我正常运行应用程序,然后附加调试器,就会出现上述问题。 我想我总是做第二个。

知道它在第一个实例中有效,我开始玩一些东西以使其在第二个实例中起作用。

调用此代码(或在开发人员选项中将应用设置为调试)修复了该问题:

adb shell am set-debug-app --persistent com.kushtrim.playground  

我不知道为什么在这个板上,如果你想附加调试器,设置调试应用程序是必须的,但在我的 Pixel XL 中不需要。总之,问题解决了。

【讨论】:

  • 当我运行这个应用程序崩溃
【解决方案2】:

嗯,我做了一些检查。我注意到使用连接了调试器的 Nexus 5x 并在 onClick 方法中设置断点不会启动 ANR。

如果我分离调试器,ANR 会按预期启动。

所以,这就是为什么我猜 SO 正在考虑附加调试器并忽略(或避免启动)ANR 对话框。

我猜您使用的 SO 与智能手机中使用的 SO 略有不同(可能是旧版本?),但这里有一些注意事项。

  1. 当主线程被长时间运行的任务或任何其他原因阻塞时,会显示 ANR。调试器会产生 ANR 是有道理的,因为调试器会停止线程。

  2. 检查主线程是否阻塞的线程不能是主线程。

  3. 为避免 ANR,有必要与检查主线程是否阻塞的组件进行通信,以确保我们处于调试模式。可能使用其他版本的 SO 可以为您解决这个问题。

  4. 或者可能阻塞系统中运行的所有线程。

@CJBS 的回答可能对你有用:

Android Studio threaded debugging

android Studio 中的断点可以配置为暂停所有正在运行的线程。这应该足以避免 ANR。

【讨论】:

    【解决方案3】:

    我会尝试以下方法 - 我没有您的问题设备,所以我无法自己测试。

    在 ActivityManagerService.java(显示 ANR 对话框的部分)中: http://androidxref.com/4.4.4_r1/xref/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java#1124

    添加条件:

    if (proc != null && proc.debugging) {      
         return;
    }
    

    我不知道您正在构建哪个 Android 版本,因此当然可能与链接文件略有不同。

    【讨论】:

    • 谢谢,我试试这个。正如我所看到的,这是 ANR 显示流程的最后一部分,它实际上显示了 ANR。早点添加支票是否有意义。受此启发,我在 InputMonitor.java 中找到了一个名为 notifyANR 的方法。
    • 无论如何,只要它能完成工作......我猜中断调试流程的只是对话框,对吧?如果系统在 logcat 中尖叫但您仍然可以调试,这有关系吗?
    • 不,停止调试的是系统杀死了应用程序。这就是为什么我问我们是否应该早点检查一下?我担心系统可能会在您提到的地方之前阻止某些事情。
    • 好的,出于某种原因,我认为对话框是让您烦恼的地方。这个代码部分怎么样:killAppAtUsersRequest(proc, null); (在函数的末尾),这不是杀死进程的部分吗?无论如何,即使显示了对话框,难道没有“等待”选项吗?
    • 对话框根本不显示。操作系统只会杀死我的应用程序。
    【解决方案4】:

    当新事件进入主线程时,可以通过保持主线程来触发 ANR。这个事件可以是一个输入,也可以像BroadcastReceiver 拿起一个Intent 一样简单。

    请务必注意这一点,因为在您尝试调试的同时,您的应用可能正在主线程中执行另一项任务。

    直接来自ANRs上的文档:

    这意味着您的应用程序在 UI 线程中所做的任何事情 需要很长时间才能完成可能会触发 ANR 对话框,因为您的 应用程序没有给自己机会来处理输入事件或 意图广播。

    您可以追踪在主线程上运行的其他代码段,或者您可以尝试下面更大胆的解决方案。

    既然你提到你可以修改 AOSP 并且这只是为了调试,你可以尝试一个可以让你调试的史诗黑客。

    ANR 超时时间在文件InputDispatcher.cpp 中的/frameworks/base/libs/ui 路径中定义。

    const nsecs_t DEFAULT_INPUT_DISPATCHING_TIMEOUT = 5000 * 1000000LL; 
    

    没有什么能阻止您更改该值以便您可以安心调试!

    【讨论】:

    • 谢谢。前段时间我有同样的想法,但找不到要修改的常量。我喜欢这个,但尽管如此,这是目前的核选项。让我们看看是否有办法将其保持在正常值,并仅为调试器修复它,因为那样我就不会看到可能发生的正常 ANR。
    • 另外,想补充一点。我发现这不是应用程序的错,而是操作系统的问题。我能够通过创建一个全新的项目、为其添加一个按钮和一个 OnClickListener 然后在其中放置一个断点来重现崩溃。
    • @RickSanchez 非常有趣。我同意更糟糕的情况,您选择“核”选项并继续您的原始工作。
    • 我用另一种方式解决了这个问题,但我不想让赏金浪费,所以我将它奖励给你(你是第一个回答的,我喜欢有创意解决方案)
    • @RickSanchez 谢谢瑞克,非常感谢。很高兴您能够解决您的问题!