debugging 如何在flutter应用中分析和调试ANR?

wsxa1bj1  于 2023-08-06  发布在  Flutter
关注(0)|答案(1)|浏览(181)

我有一堆ANR报告在我的Google Play控制台为我的Flutter应用程序。我如何找出flutter应用程序中的哪一行导致了问题,因为我在报告中看到的唯一行号是Java文件。有没有办法追踪到真正的Flutter文件?
下面是ANR报告中的代码示例:

"main" tid=1 Native
"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x753d2890 self=0x7784c14c00
  | sysTid=5725 nice=-10 cgrp=default sched=0/0 handle=0x780af11550
  | state=S schedstat=( 783263348209 325919126195 1054920 ) utm=51688 stm=26637 core=1 HZ=100
  | stack=0x7fd6d7f000-0x7fd6d81000 stackSize=8MB
  | held mutexes=

  #00  pc 000000000001f2ac  /system/lib64/libc.so (syscall+28)

  #01  pc 00000000000d7e50  /system/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)

  #02  pc 0000000000333fdc  /system/lib64/libart.so (art::JNI::CallObjectMethod(_JNIEnv*, _jobject*, _jmethodID*, ...)+556)

  #03  pc 00000000000f896c  /system/lib64/libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync(long, int, unsigned int)+48)

  #04  pc 0000000000050a14  /system/lib64/libandroidfw.so (android::DisplayEventDispatcher::handleEvent(int, int, void*)+164)

  #05  pc 0000000000014ff8  /system/lib64/libutils.so (android::Looper::pollInner(int)+836)

  #06  pc 0000000000014c18  /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+60)

  #07  pc 000000000012b348  /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44)

  at android.os.MessageQueue.nativePollOnce (Native method)

  at android.os.MessageQueue.next (MessageQueue.java:326)

  at android.os.Looper.loop (Looper.java:190)

  at android.app.ActivityThread.main (ActivityThread.java:7276)

  at java.lang.reflect.Method.invoke (Native method)

  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:575)

  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:903)

字符串

ao218c7q

ao218c7q1#

要在Flutter应用中分析和调试ANR,您可以按照以下步骤操作:
1.查看ANR报告:您可以在Google Play控制台的“ANR & Crashes”部分中找到ANR报告。该报告将包含有关ANR的信息,例如包名称、进程名称和发生时间。
1.分析ANR报告:ANR报告将包含一个堆栈跟踪,显示导致ANR的方法调用序列。您可以使用此信息识别导致ANR的代码。但是,堆栈跟踪可能只显示Java文件,而不显示Flutter文件。要将Java文件Map到Flutter文件,您可以在构建应用时使用--obfuscate标志。这将生成一个Map文件,您可以使用它将Java堆栈跟踪Map到Flutter代码。
1.重现问题:一旦确定了导致ANR的代码,您就可以尝试在本地计算机上重现该问题。您可以使用像adb这样的工具来模拟ANR并调试它们。
1.调试问题:重现问题后,可以使用print语句或debugger()等调试工具来调试问题。您还可以使用Flutter DevToolsAndroid Studio等工具来调试您的应用。
1.解决问题:一旦您确定并调试了问题,就可以通过优化代码或在必要时使用异步操作来修复它。
希望这对你有帮助!

相关问题