我有一堆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)
字符串
1条答案
按热度按时间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 DevTools
或Android Studio
等工具来调试您的应用。1.解决问题:一旦您确定并调试了问题,就可以通过优化代码或在必要时使用异步操作来修复它。
希望这对你有帮助!