使用Android Studio 分析错误报告 - 慕课网

文章推薦指數: 80 %
投票人數:10人

1. 获取错误报告 · 1.1 从真机设备上获取 · 1.2 从Android 模拟器上获取 · 1.3 使用adb 命令获取. 章节索引: AndroidStudio如何分析错误报告 前面的小节我们介绍了调试布局方面的知识,可以有效的帮助我们解决布局显示异常,本小结我们学习如何获取和分析错误报告。

1.获取错误报告 错误报告包含设备日志、堆栈轨迹和其他诊断信息,可以帮助我们查找和修复应用中的错误。

我们可以通过以下几种方式从设备上获取错误报告。

1.1从真机设备上获取 如需直接从我们的设备上获取错误报告,请执行以下操作: 确保已启用开发者选项; 在开发者选项中,点按错误报告; 选择所需的错误报告类型,然后点按报告; 稍后,我们便会收到错误报告已准备就绪的通知。

要分享错误报告,请点按该通知。

1.2从Android模拟器上获取 在Android模拟器中,我们可以使用Extendedcontrols窗口中的Bugreport功能: 点击模拟器面板中的More图标; 在Extendedcontrols窗口中,选择左侧的Bugreport; 此时系统会打开一个屏幕,我们可以在其中查看错误报告详细信息,例如屏幕截图、AVD配置信息和错误报告日志。

我们还可以输入一条包含复制步骤的消息,以便与报告一起保存。

等待错误报告完成收集,然后点击SaveReport。

1.3使用adb命令获取 如果我们只连接了一台设备,则可以使用adb获取错误报告,如下所示: $adbbugreportD:\Reports Tips:如果没有指定错误报告的路径,则系统会将其保存到本地目录。

如果我们连接了多台设备,则必须使用-s选项指定设备。

运行以下adb命令可获取设备序列号并生成错误报告: $adbdevices Listofdevicesattached emulator-5554device 8XV7N15C31003476device $adb-s8XV7N15C31003476bugreport 2.错误报告文件内容 默认情况下,错误报告是ZIP文件。

ZIP文件名类似bugreport-BUILD_ID-DATE.zip,它可能会包含多个文件,但最重要的文件是bugreport-BUILD_ID-DATE.txt。

此文件就是错误报告,它包含系统服务(dumpsys)、错误日志(dumpstate)和系统消息日志(logcat)的诊断输出。

系统消息包括设备抛出错误时的堆栈轨迹,以及从所有应用中使用Log类写入的消息。

ZIP文件中有一个version.txt元数据文件,其中包含Android版本号,而且启用systrace后,ZIP文件中还会包含systrace.txt文件。

Systrace工具可以获取并显示应用进程和其他Android系统进程的执行时间,从而帮助分析应用的性能。

dumpstate工具会将文件从设备的文件系统复制到ZIP文件的FS文件夹下,以便我们引用它们。

例如,设备中的/dirA/dirB/fileC文件会在ZIP文件中生成FS/dirA/dirB/fileC条目 错误报告文件结构如下: 3.常见日志分析 3.1ANR和死锁 错误报告有助于我们找出导致应用无响应(ANR)错误和死锁事件的原因。

找出无响应的应用 当某个应用在一定时间内没有响应(通常是由于主线程被阻塞或繁忙)时,系统会终止该进程并将堆栈转储到/data/anr。

要找出ANR背后的罪魁祸首,请为二进制事件日志中的am_anr执行grep命令。

日志范例如下: grep"am_anr"bugreport-2015-10-01-18-13-48.txt 10-0118:12:49.59946004614Iam_anr:[0,29761,com.google.android.youtube,953695941,executingservicecom.google.android.youtube/com.google.android.apps.youtube.app.offline.transfer.OfflineTransferService] 10-0118:14:10.21146004614Iam_anr:[0,30363,com.google.android.apps.plus,953728580,executingservicecom.google.android.apps.plus/com.google.android.apps.photos.service.PhotosService] 我们也可以为logcat日志(其中包含关于发生ANR时是什么在占用CPU的更多信息)中的ANRin执行grep命令。

日志范例如下: grep"ANRin"bugreport-2015-10-01-18-13-48.txt 10-0118:13:11.98446004614EActivityManager:ANRincom.google.android.youtube 10-0118:14:31.72046004614EActivityManager:ANRincom.google.android.apps.plus 10-0118:14:31.72046004614EActivityManager:PID:30363 10-0118:14:31.72046004614EActivityManager:Reason:executingservicecom.google.android.apps.plus/com.google.android.apps.photos.service.PhotosService 10-0118:14:31.72046004614EActivityManager:Load:35.27/23.9/16.18 10-0118:14:31.72046004614EActivityManager:CPUusagefrom16msto21868mslater: 10-0118:14:31.72046004614EActivityManager:74%3361/mm-qcamera-daemon:62%user+12%kernel/faults:15276minor10major 10-0118:14:31.72046004614EActivityManager:41%4600/system_server:18%user+23%kernel/faults:18597minor309major 10-0118:14:31.72046004614EActivityManager:32%27420/com.google.android.GoogleCamera:24%user+7.8%kernel/faults:48374minor338major 10-0118:14:31.72046004614EActivityManager:16%130/kswapd0:0%user+16%kernel 10-0118:14:31.72046004614EActivityManager:15%283/mmcqd/0:0%user+15%kernel ... 10-0118:14:31.72046004614EActivityManager:0.1%27248/irq/503-synapti:0% 10-0118:14:31.72146004614IActivityManager:Killing30363:com.google.android.apps.plus/u0a206(adj0):bganr 查找堆栈跟踪 通常我们可以找到与ANR对应的堆栈跟踪。

请确保VM跟踪上的时间戳和PID与我们正在调查的ANR相符,然后再检查进程的主线程。

日志范例如下: VMTRACESATLASTANR(/data/anr/traces.txt:2015-10-0118:14:41) pid30363at2015-10-0118:14:11 Cmdline:com.google.android.apps.plus Buildfingerprint:'google/angler/angler:6.0/MDA89D/2294819:userdebug/dev-keys' ABI:'arm' Buildtype:optimized Zygoteloadedclasses=3978postzygoteclasses=27 Interntable:45068strong;21weak JNI:CheckJNIisoff;globals=283(plus360weak) Libraries:/system/lib/libandroid.so/system/lib/libcompiler_rt.so/system/lib/libjavacrypto.so/system/lib/libjnigraphics.so/system/lib/libmedia_jni.so/system/lib/libwebviewchromium_loader.solibjavacore.so(7) Heap:29%free,21MB/30MB;32251objects DumpingcumulativeGctimings Totalnumberofallocations32251 Totalbytesallocated21MB Totalbytesfreed0B Freememory9MB FreememoryuntilGC9MB FreememoryuntilOOME490MB Totalmemory30MB Maxmemory512MB Zygotespacesize1260KB Totalmutatorpausedtime:0 TotaltimewaitingforGCtocomplete:0 TotalGCcount:0 TotalGCtime:0 TotalblockingGCcount:0 TotalblockingGCtime:0 suspendallhistogram:Sum:119.728ms99%C.I.0.010ms-107.765msAvg:5.442msMax:119.562ms DALVIKTHREADS(12): "SignalCatcher"daemonprio=5tid=2Runnable |group="system"sCount=0dsCount=0obj=0x12c400a0self=0xef460000 |sysTid=30368nice=0cgrp=defaultsched=0/0handle=0xf4a69930 |state=Rschedstat=(9021773550052326)utm=0stm=0core=1HZ=100 |stack=0xf496d000-0xf496f000stackSize=1014KB |heldmutexes="mutatorlock"(sharedheld) native:#00pc0035a217/system/lib/libart.so(art::DumpNativeStack(std::__1::basic_ostream>&,int,charconst*,art::ArtMethod*,void*)+126) native:#01pc0033b03b/system/lib/libart.so(art::Thread::Dump(std::__1::basic_ostream>&)const+138) native:#02pc00344701/system/lib/libart.so(art::DumpCheckpoint::Run(art::Thread*)+424) native:#03pc00345265/system/lib/libart.so(art::ThreadList::RunCheckpoint(art::Closure*)+200) native:#04pc00345769/system/lib/libart.so(art::ThreadList::Dump(std::__1::basic_ostream>&)+124) native:#05pc00345e51/system/lib/libart.so(art::ThreadList::DumpForSigQuit(std::__1::basic_ostream>&)+312) native:#06pc0031f829/system/lib/libart.so(art::Runtime::DumpForSigQuit(std::__1::basic_ostream>&)+68) native:#07pc00326831/system/lib/libart.so(art::SignalCatcher::HandleSigQuit()+896) native:#08pc003270a1/system/lib/libart.so(art::SignalCatcher::Run(void*)+324) native:#09pc0003f813/system/lib/libc.so(__pthread_start(void*)+30) native:#10pc00019f75/system/lib/libc.so(__start_thread+6) (nomanagedstackframes) "main"prio=5tid=1Suspended |group="main"sCount=1dsCount=0obj=0x747552a0self=0xf5376500 |sysTid=30363nice=0cgrp=defaultsched=0/0handle=0xf74feb34 |state=Sschedstat=(331107086164153349851)utm=6stm=27core=3HZ=100 |stack=0xff00f000-0xff011000stackSize=8MB |heldmutexes= kernel:__switch_to+0x7c/0x88 kernel:futex_wait_queue_me+0xd4/0x130 kernel:futex_wait+0xf0/0x1f4 kernel:do_futex+0xcc/0x8f4 kernel:compat_SyS_futex+0xd0/0x14c kernel:cpu_switch_to+0x48/0x4c native:#00pc000175e8/system/lib/libc.so(syscall+28) native:#01pc000f5ced/system/lib/libart.so(art::ConditionVariable::Wait(art::Thread*)+80) native:#02pc00335353/system/lib/libart.so(art::Thread::FullSuspendCheck()+838) native:#03pc0011d3a7/system/lib/libart.so(art::ClassLinker::LoadClassMembers(art::Thread*,art::DexFileconst&,unsignedcharconst*,art::Handle<:mirror::class>,art::OatFile::OatClassconst*)+746) native:#04pc0011d81d/system/lib/libart.so(art::ClassLinker::LoadClass(art::Thread*,art::DexFileconst&,art::DexFile::ClassDefconst&,art::Handle<:mirror::class>)+88) native:#05pc00132059/system/lib/libart.so(art::ClassLinker::DefineClass(art::Thread*,charconst*,unsignedint,art::Handle<:mirror::classloader>,art::DexFileconst&,art::DexFile::ClassDefconst&)+320) native:#06pc001326c1/system/lib/libart.so(art::ClassLinker::FindClassInPathClassLoader(art::ScopedObjectAccessAlreadyRunnable&,art::Thread*,charconst*,unsignedint,art::Handle<:mirror::classloader>,art::mirror::Class**)+688) native:#07pc002cb1a1/system/lib/libart.so(art::VMClassLoader_findLoadedClass(_JNIEnv*,_jclass*,_jobject*,_jstring*)+264) native:#08pc002847fd/data/dalvik-cache/arm/system@[email protected](Java_java_lang_VMClassLoader_findLoadedClass__Ljava_lang_ClassLoader_2Ljava_lang_String_2+112) atjava.lang.VMClassLoader.findLoadedClass!(Nativemethod) atjava.lang.ClassLoader.findLoadedClass(ClassLoader.java:362) atjava.lang.ClassLoader.loadClass(ClassLoader.java:499) atjava.lang.ClassLoader.loadClass(ClassLoader.java:469) atandroid.app.ActivityThread.installProvider(ActivityThread.java:5141) atandroid.app.ActivityThread.installContentProviders(ActivityThread.java:4748) atandroid.app.ActivityThread.handleBindApplication(ActivityThread.java:4688) atandroid.app.ActivityThread.-wrap1(ActivityThread.java:-1) atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) atandroid.os.Handler.dispatchMessage(Handler.java:102) atandroid.os.Looper.loop(Looper.java:148) atandroid.app.ActivityThread.main(ActivityThread.java:5417) atjava.lang.reflect.Method.invoke!(Nativemethod) atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 查找死锁 由于线程出现粘滞,死锁往往首先表现为ANR。

如果系统服务器发生死锁,监控程序最终会将其终止,从而导致日志中出现类似以下的条目:WATCHDOGKILLINGSYSTEMPROCESS。

对于用户来说,看到的是设备重新启动,但从技术上来讲这是运行时重启,而不是真正的设备重新启动。

要查找死锁,请检查VM跟踪部分中是否存在以下模式:线程A在等待线程B占用的某些资源,而线程B也在等待线程A占用的某些资源。

日志范例如下: "Binder_B"prio=5tid=73Blocked |group="main"sCount=1dsCount=0obj=0x13faa0a0self=0x95e24800 |sysTid=2016nice=0cgrp=defaultsched=0/0handle=0x8b68d930 |state=Sschedstat=(9351576559414143111916920)utm=819stm=116core=1HZ=100 |stack=0x8b591000-0x8b593000stackSize=1014KB |heldmutexes= atcom.android.server.pm.UserManagerService.exists(UserManagerService.java:387) -waitingtolock<0x025f9b02>(aandroid.util.ArrayMap)heldbythread20 atcom.android.server.pm.PackageManagerService.getApplicationInfo(PackageManagerService.java:2848) atcom.android.server.AppOpsService.getOpsRawLocked(AppOpsService.java:881) atcom.android.server.AppOpsService.getOpsLocked(AppOpsService.java:856) atcom.android.server.AppOpsService.noteOperationUnchecked(AppOpsService.java:719) -locked<0x0231885a>(acom.android.server.AppOpsService) atcom.android.server.AppOpsService.noteOperation(AppOpsService.java:713) atcom.android.server.AppOpsService$2.getMountMode(AppOpsService.java:260) atcom.android.server.MountService$MountServiceInternalImpl.getExternalStorageMountMode(MountService.java:3416) atcom.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3228) atcom.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3170) atcom.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3059) atcom.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:1070) -locked<0x044d166f>(acom.android.server.am.ActivityManagerService) atcom.android.server.am.ActivityManagerService.finishReceiver(ActivityManagerService.java:16950) atandroid.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:494) atcom.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2432) atandroid.os.Binder.execTransact(Binder.java:453) "PackageManager"prio=5tid=20Blocked |group="main"sCount=1dsCount=0obj=0x1304f4a0self=0xa7f43900 |sysTid=1300nice=10cgrp=bg_non_interactivesched=0/0handle=0x9fcf9930 |state=Sschedstat=(261901419961361215480244357)utm=2410stm=209core=2HZ=100 |stack=0x9fbf7000-0x9fbf9000stackSize=1038KB |heldmutexes= atcom.android.server.AppOpsService.noteOperationUnchecked(AppOpsService.java:718) -waitingtolock<0x0231885a>(acom.android.server.AppOpsService)heldbythread73 atcom.android.server.AppOpsService.noteOperation(AppOpsService.java:713) atcom.android.server.AppOpsService$2.getMountMode(AppOpsService.java:260) atcom.android.server.AppOpsService$2.hasExternalStorage(AppOpsService.java:273) atcom.android.server.MountService$MountServiceInternalImpl.hasExternalStorage(MountService.java:3431) atcom.android.server.MountService.getVolumeList(MountService.java:2609) atandroid.os.storage.StorageManager.getVolumeList(StorageManager.java:880) atandroid.os.Environment$UserEnvironment.getExternalDirs(Environment.java:83) atandroid.os.Environment.isExternalStorageEmulated(Environment.java:708) atcom.android.server.pm.PackageManagerService.isExternalMediaAvailable(PackageManagerService.java:9327) atcom.android.server.pm.PackageManagerService.startCleaningPackages(PackageManagerService.java:9367) -locked<0x025f9b02>(aandroid.util.ArrayMap) atcom.android.server.pm.PackageManagerService$PackageHandler.doHandleMessage(PackageManagerService.java:1320) atcom.android.server.pm.PackageManagerService$PackageHandler.handleMessage(PackageManagerService.java:1122) atandroid.os.Handler.dispatchMessage(Handler.java:102) atandroid.os.Looper.loop(Looper.java:148) atandroid.os.HandlerThread.run(HandlerThread.java:61) atcom.android.server.ServiceThread.run(ServiceThread.java:46) 3.2Activity活动 查看处于聚焦状态的Activity 要查看记录的处于聚焦状态的Activity,请搜索am_focused_activity。

日志范例如下: grep"am_focused_activity"bugreport-2015-10-01-18-13-48.txt 10-0118:10:41.409460014112Iam_focused_activity:[0,com.google.android.GoogleCamera/com.android.camera.CameraActivity] 10-0118:11:17.31346005687Iam_focused_activity:[0,com.google.android.googlequicksearchbox/com.google.android.launcher.GEL] 10-0118:11:52.747460014113Iam_focused_activity:[0,com.google.android.GoogleCamera/com.android.camera.CameraActivity] 10-0118:14:07.76246005687Iam_focused_activity:[0,com.google.android.googlequicksearchbox/com.google.android.launcher.GEL] 查看进程启动事件 要查看记录的进程启动事件,请搜索Startproc。

日志范例如下: grep"Startproc"bugreport-2015-10-01-18-13-48.txt 10-0118:09:15.30946004612IActivityManager:Startproc24533:com.metago.astro/u0a240forbroadcastcom.metago.astro/com.inmobi.commons.analytics.androidsdk.IMAdTrackerReceiver 10-0118:09:15.687460014112IActivityManager:Startproc24548:com.google.android.apps.fitness/u0a173forservicecom.google.android.apps.fitness/.api.services.ActivityUpsamplingService 10-0118:09:15.77746006604IActivityManager:Startproc24563:cloudtv.hdwidgets/u0a145forbroadcastcloudtv.hdwidgets/cloudtv.switches.SwitchSystemUpdateReceiver 10-0118:09:20.57446006604IActivityManager:Startproc24617:com.wageworks.ezreceipts/u0a111forbroadcastcom.wageworks.ezreceipts/.ui.managers.IntentReceiver 设备是否发生系统颠簸 要确定设备是否发生系统颠簸,请检查am_proc_died和am_proc_start前后在短时间内是否出现活动异常增加。

日志范例如下: grep-e"am_proc_died"-e"am_proc_start"bugreport-2015-10-01-18-13-48.txt 10-0118:07:06.49446009696Iam_proc_died:[0,20074,com.android.musicfx] 10-0118:07:06.55546006606Iam_proc_died:[0,31166,com.concur.breeze] 10-0118:07:06.566460014112Iam_proc_died:[0,18812,com.google.android.apps.fitness] 10-0118:07:07.01846007513Iam_proc_start:[0,20361,10113,com.sony.playmemories.mobile,broadcast,com.sony.playmemories.mobile/.service.StartupReceiver] 10-0118:07:07.35746004614Iam_proc_start:[0,20381,10056,com.google.android.talk,service,com.google.android.talk/com.google.android.libraries.hangouts.video.CallService] 10-0118:07:07.78446004612Iam_proc_start:[0,20402,10190,com.andcreate.app.trafficmonitor:loopback_measure_serivce,service,com.andcreate.app.trafficmonitor/.loopback.LoopbackMeasureService] 10-0118:07:10.75346005997Iam_proc_start:[0,20450,10097,com.amazon.mShop.android.shopping,broadcast,com.amazon.mShop.android.shopping/com.amazon.identity.auth.device.storage.LambortishClock$ChangeTimestampsBroadcastReceiver] 10-0118:07:15.26746006605Iam_proc_start:[0,20539,10173,com.google.android.apps.fitness,service,com.google.android.apps.fitness/.api.services.ActivityUpsamplingService] 10-0118:07:15.98546004612Iam_proc_start:[0,20568,10022,com.android.musicfx,broadcast,com.android.musicfx/.ControlPanelReceiver] 10-0118:07:16.31546007512Iam_proc_died:[0,20096,com.google.android.GoogleCamera] 3.3内存异常 内存不足可能会导致系统发生颠簸,这是因为虽然内存不足时系统会终止某些进程来释放内存,但又会继续启动其他进程。

要查看内存不足的确凿证据,请检查二进制事件日志中am_proc_died和am_proc_start条目的密集程度。

内存不足还可能会减慢任务切换速度,并且可能会阻止进行返回尝试(因为用户尝试返回到的任务已被终止)。

如果启动器被终止,它会在用户触摸主屏幕按钮时重启,并且日志中会显示启动器重新加载其内容。

查看历史指标 二进制事件日志中的am_low_memory条目表示最后一个缓存的进程已终止。

在此之后,系统开始终止各项服务。

日志范例如下: grep"am_low_memory"bugreport-2015-10-01-18-13-48.txt 10-0118:11:02.21946007513Iam_low_memory:41 10-0118:12:18.526460014112Iam_low_memory:39 10-0118:12:18.87446007514Iam_low_memory:38 10-0118:12:22.570460014112Iam_low_memory:40 10-0118:12:34.811460020319Iam_low_memory:43 10-0118:12:37.94546006521Iam_low_memory:43 10-0118:12:47.804460014110Iam_low_memory:43 查看系统颠簸指标 关于系统颠簸(分页、直接回收等)的其他指标包括kswapd、kworker和mmcqd消耗的CPU周期。

日志范例如下: CPUINFO(top-n1-d1-m30-t) User15%,System54%,IOW28%,IRQ0% User82+Nice2+Sys287+Idle1+IOW152+IRQ0+SIRQ5=529 PIDTIDPRCPU%SVSSRSSPCYUIDThreadProc 1522915229019%R0K0Kfgrootkworker/0:2 295122951717%D1173524K101188Kbgu0_a27SignalCatchercom.google.android.talk 245652457036%D2090920K145168Kfgu0_a22SignalCatchercom.google.android.googlequicksearchbox:search 195251952526%R3476K1644Kfgshelltoptop 249572496225%R1706928K125716Kbgu0_a47SignalCatchercom.google.android.GoogleCamera 195191951934%S0K0Kfgrootkworker/3:1 12012003%S0K0Kfgrootmmcqd/1 182331823313%S0K0Kfgrootkworker/1:1 255892559412%D1270476K75776Kfgu0_a8SignalCatchercom.google.android.gms 193991939921%S0K0Kfgrootkworker/2:2 1963197810%S1819100K125136Kfgsystemandroid.fgsystem_server 1963198130%S1819100K125136Kfgsystemandroid.displaysystem_server 获取内存快照 内存快照是一种dumpstate,其中会列出正在运行的Java进程和本机进程. 日志范例如下: TotalPSSbyOOMadjustment: 86752kB:Native 22645kB:surfaceflinger(pid197) 18597kB:mediaserver(pid204) 136959kB:System 136959kB:system(pid785) 220218kB:Persistent 138859kB:com.android.systemui(pid947/activities) 39178kB:com.android.nfc(pid1636) 28313kB:com.android.phone(pid1659) 13868kB:com.redbend.vdmc(pid1646) 9534kB:PersistentService 9534kB:com.android.bluetooth(pid23807) 178604kB:Foreground 168620kB:com.google.android.googlequicksearchbox(pid1675/activities) 9984kB:com.google.android.apps.maps(pid13952) 188286kB:Visible 85326kB:com.google.android.wearable.app(pid1535) 38978kB:com.google.process.gapps(pid1510) 31936kB:com.google.android.gms.persistent(pid2072) 27950kB:com.google.android.gms.wearable(pid1601) 4096kB:com.google.android.googlequicksearchbox:interactor(pid1550) 52948kB:Perceptible 52948kB:com.google.android.inputmethod.latin(pid1566) 150851kB:AServices 81121kB:com.google.android.gms(pid1814) 37586kB:com.google.android.talk(pid9584) 10949kB:com.google.android.music:main(pid4019) 10727kB:com.motorola.targetnotif(pid31071) 10468kB:com.google.android.GoogleCamera(pid9984) 33298kB:Previous 33298kB:com.android.settings(pid9673/activities) 165188kB:BServices 49490kB:com.facebook.katana(pid15035) 22483kB:com.whatsapp(pid28694) 21308kB:com.iPass.OpenMobile(pid5325) 19788kB:com.google.android.apps.googlevoice(pid23934) 17399kB:com.google.android.googlequicksearchbox:search(pid30359) 9073kB:com.google.android.apps.youtube.unplugged(pid21194) 7660kB:com.iPass.OpenMobile:remote(pid23754) 7291kB:com.pujie.wristwear.pujieblack(pid24240) 7157kB:com.instagram.android:mqtt(pid9530) 3539kB:com.qualcomm.qcrilmsgtunnel(pid16186) 204324kB:Cached 43424kB:com.amazon.mShop.android(pid13558) 22563kB:com.google.android.apps.magazines(pid13844) 4298kB:com.google.android.apps.enterprise.dmagent(pid13826) 3.4电源 事件日志中包含屏幕电源状态,其中0表示屏幕关闭,1表示屏幕打开,2表示已锁屏。

日志范例如下: grepscreen_toggledbugreport-2015-10-18-16-52-22.txt 10-1815:05:04.383992992Iscreen_toggled:1 10-1815:05:07.010992992Iscreen_toggled:0 10-1815:23:15.063992992Iscreen_toggled:1 10-1815:23:25.684992992Iscreen_toggled:0 10-1815:36:31.623992992Iscreen_toggled:1 10-1815:36:37.66032833283Iscreen_toggled:2 错误报告中还包含关于唤醒锁的统计信息,唤醒锁是应用开发者采用的一种机制,用于表明其应用需要设备保持开启状态。

唤醒锁总时长统计信息仅跟踪唤醒锁实际负责使设备保持唤醒状态的时间,不包括屏幕处于开启状态的时间。

此外,如果同时持有多个唤醒锁,系统会在它们之间分配唤醒锁时长。

4.小结 本节课程我们主要学习了如何获取和分析错误报告。

本节课程的重点如下: 掌握如何获取错误报告; 掌握如何分析常见日志。

上一节 下一节 AndroidStudio的简介、安装和配置 AndroidStudio简介 如何安装AndroidStudio AndroidStudio常用配置 更新AndroidStudio及SDK AndroidStudio键盘快捷键 AndroidStudio开发应用 第一个AndroidStudio应用 Android模拟器的安装及管理 Android模拟器的控制台命令 Android模拟器的常用操作 Android真机的使用 AndroidStudio项目 AndroidStudio编写应用代码 AndroidStudio查找示例代码 AndroidStudio检查改进代码 AndroidStudio的布局编辑器 AndroidStudio添加应用资源 ResourceManager工具 TranslationsEditor工具 AndroidStudio的运行配置 AndroidStudio如何编译运行应用 AndroidStudio中使用命令行构建应用 Android开发者选项 AndroidStudio如何添加和查看日志 使用AndroidStudio分析堆栈轨迹 AndroidStudio如何调试布局 使用AndroidStudio分析错误报告 AndroidStudio如何发布应用 AndroidStudio剖析应用性能 AndroidStudio如何分析CPU活动 AndroidStudio如何分析内存活动 AndroidStudio如何分析网络活动 AndroidStudio如何分析能耗活动 AndroidStudioC/C++支持 AndroidStudio安装NDK和CMake AndroidStudio如何配置CMake AndroidStudio如何关联Gradle AndroidStudio开发C/C++例子 常用命令行工具 AndroidSDK工具介绍 AndroidSDK构建工具介绍 AndroidSDK平台工具介绍 Android模拟器工具介绍 Android分析工具介绍 使用AndroidStudio分析错误报告 26/40 字体 A A 目录 书签 收藏 A 大小 代码预览 退出



請為這篇文章評分?