一、分析前的准备工作
1. 查看内存
2. 查看进程信息,能够实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器
3. 虚拟内存的查看,目前还看不懂
4. 虚拟机信息,包括进程的,线程的跟踪信息,这是用来跟踪进程和线程具体点的好地方 。
导出到当前目录 adb pull /data/anr/traces.txt .
二、分析log
1. 查找关键字
通过查找:"null" "error" " "E/","Fatal","NullPointerException","Build fingerprint:","exception","anr","DexOpt"等的错误信息,来定位问题
1)空指针问题
NullPointerException: 这个直接找到java代码,首先分析为什么会是空指针,如果逻辑上没有问题,加上一个判断就可以,也就是说如果为空的时候再次赋值或者直接返回
2).没有捕获异常问题
Exception: 能捕获的话捕获
3)ANR问题
anr:要分析原因了,看看什么导致的,然后优化代码
例子
指定哪个java包出问题
E/ActivityManager( 957): ANR in com.ipanel.join.appstore
进程号为957发生了如下错误:com.ipanel.join.appstore 包下面 Broadcast问题
ANR原因:
E/ActivityManager( 957): Reason: Broadcast of Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=com.ipanel.join.appstore/.widget.SmallWidget1 (has extras) }
这是ANR的堆栈调用文件
I/dalvikvm( 1014): Wrote stack traces to '/data/anr/traces.txt'
通过上面的log信息分析,应该是接收一个广播消息时超时了
我们再分析虚拟机信息 ,打开/data/anr/traces.txt,可有通过adb pull /data/anr/traces.txt .
这里每一段都是一个线程 ,当然我们还是看线程号为1的主线程了。通过分析发现关键问题是这样:
搜索“DALVIK THREADS”关键词,快速定位到本应用程序的虚拟机信息日志
其实从这句话:
at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)
基本上确认是 socket ->connect 连接超时了,导致主线程5s内没有响应从而产生ANR错误。默认的connect连接timeout时间是75s
其实解决办法就是利用非阻塞方式进行连接即可。
从CPU占用率上也可以看出是在kernel中执行堵塞住了
E/ActivityManager( 957): 75% TOTAL: 4.7% user + 70% kernel
4)Fatal问题
Fatal: 比较严重了,很多都很动态库和空指针有关,一般会接下来打印"Build fingerprint:"或”NullPointerException“
5)动态库问题
Build fingerprint: 动态库的问题,如何调试,还在学习中。。。
Log:
arm-eabi-addr2line这个工具通过库的trace来跟踪代码的,这个工具位于Android\prebuilt\linux-x86\toolchain\arm-eabi-4.4.3\binarm-eabi-addr2line, "source built/envsetup.sh"可以将这个工具加入到全局
查找:
可以知道是sensorservice在调enable的时候出现了问题,具体原因还得看sensorservice的管理机制,总之能定位到问题出现的地方了。
6)执行DexOpt错误
DexOpt:解压或优化extract+optimize DEX出的问题
I、没有出现magic number错误,这个原因与原子操作无关(这是一快速的加锁和解锁的轻量级操作函数)
II、执行dexopt出错,查明是服务器硬盘没空间了,导致引导文件系统的时候没有空间进行解压而失败
2.系统启动后默认其妙或随机死机情况
出现这种错误:
查看内存: cat /proc/meminfo 发现空闲内存只剩下几M空间了。
请加大android系统的内存即可解决问题
1. 查看内存
#cat /proc/meminfo
MemTotal: 903640 kB //总计物理内存的大小
MemFree: 455024 kB //可用内存有多少
Buffers: 10928 kB //磁盘缓存内存的大小
Cached: 189004 kB
SwapCached: 0 kB
Active: 184708 kB
Inactive: 158564 kB
Active(anon): 143364 kB
Inactive(anon): 244 kB
Active(file): 41344 kB
Inactive(file): 158320 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 155648 kB
HighFree: 304 kB
LowTotal: 747992 kB
LowFree: 454720 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 143332 kB
Mapped: 61624 kB
Shmem: 276 kB
Slab: 12776 kB
SReclaimable: 5040 kB
SUnreclaim: 7736 kB
KernelStack: 5128 kB
PageTables: 9012 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 451820 kB
Committed_AS: 7976472 kB
VmallocTotal: 122880 kB
VmallocUsed: 49792 kB
VmallocChunk: 46020 kB
2. 查看进程信息,能够实时显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器
#top -n 1 -d 1 -m 30 -t
User 13%, System 10%, IOW 0%, IRQ 0%
User 22 + Nice 9 + Sys 24 + Idle 170 + IOW 0 + IRQ 0 + SIRQ 1 = 226
PID TID PR CPU% S VSS RSS PCY UID Thread Proc
1762 1762 0 5% R 1264K 664K root top top
1323 1340 0 3% S 676928K 43096K bg u0_a55 MMHandlerThread com.tencent.mm
9 9 1 2% S 0K 0K root ksoftirqd/1
1323 1325 0 1% S 676928K 43096K bg u0_a55 GC com.tencent.mm
583 737 1 0% S 667232K 30480K fg u0_a44 droid.phasebeam com.android.phasebeam
298 326 1 0% S 728032K 45172K fg system ActivityManager system_server
298 321 0 0% S 728032K 45172K fg system SensorService system_server
960 960 0 0% S 661188K 33004K fg u0_a55 tencent.mm:push com.tencent.mm:push
843 843 1 0% S 660692K 38672K fg u0_a52 ndroid.systemui com.android.systemui
84 250 1 0% S 62188K 5688K fg system VSyncThread /system/bin/surfaceflinger
583 749 1 0% S 667232K 30480K fg u0_a44 droid.phasebeam com.android.phasebeam
960 984 0 0% S 661188K 33004K fg u0_a55 MMHandlerThread com.tencent.mm:push
22 22 0 0% S 0K 0K root kinteractiveup
84 84 1 0% S 62188K 5688K fg system surfaceflinger /system/bin/surfaceflinger
84 253 1 0% S 62188K 5688K fg system Binder_1 /system/bin/surfaceflinger
1143 1528 0 0% S 665552K 33132K bg u0_a23 AirPlayServer com.waxrain.airplayer
84 245 1 0% S 62188K 5688K fg system SurfaceFlinger /system/bin/surfaceflinger
53 53 0 0% S 0K 0K root rknand_buffer
1323 1323 0 0% S 676928K 43096K bg u0_a55 com.tencent.mm com.tencent.mm
298 637 0 0% S 728032K 45172K fg system Binder_4 system_server
298 647 0 0% S 728032K 45172K fg system Binder_5 system_server
1323 1330 0 0% S 676928K 43096K bg u0_a55 Compiler com.tencent.mm
84 864 0 0% S 62188K 5688K fg system Binder_3 /system/bin/surfaceflinger
298 304 1 0% S 728032K 45172K fg system Compiler system_server
3 3 0 0% S 0K 0K root ksoftirqd/0
1323 1335 0 0% S 676928K 43096K fg u0_a55 Binder_2 com.tencent.mm
51 51 0 0% S 0K 0K root binder
52 52 0 0% S 352K 184K root ueventd /sbin/ueventd
54 54 1 0% S 0K 0K root mtdblock0
55 55 1 0% S 0K 0K root mtdblock1
3. 虚拟内存的查看,目前还看不懂
#cat /proc/vmstat
nr_free_pages 112977
nr_inactive_anon 61
nr_active_anon 36183
nr_inactive_file 39628
nr_active_file 10351
nr_unevictable 0
nr_mlock 0
nr_anon_pages 36180
nr_mapped 15427
nr_file_pages 50046
nr_dirty 0
nr_writeback 0
nr_slab_reclaimable 1455
nr_slab_unreclaimable 2005
nr_page_table_pages 2281
nr_kernel_stack 689
nr_unstable 0
nr_bounce 0
nr_vmscan_write 0
nr_writeback_temp 0
nr_isolated_anon 0
nr_isolated_file 0
nr_shmem 69
nr_dirtied 5665
nr_written 5413
nr_anon_transparent_hugepages 0
nr_dirty_threshold 26869
nr_dirty_background_threshold 6717
pgpgin 197593
pgpgout 26455
pswpin 0
pswpout 0
pgalloc_normal 389068
pgalloc_high 61026
pgalloc_movable 0
pgfree 563265
pgactivate 10977
pgdeactivate 0
pgfault 450191
pgmajfault 1011
pgrefill_normal 0
pgrefill_high 0
pgrefill_movable 0
pgsteal_normal 0
pgsteal_high 0
pgsteal_movable 0
pgscan_kswapd_normal 0
pgscan_kswapd_high 0
pgscan_kswapd_movable 0
pgscan_direct_normal 0
pgscan_direct_high 0
pgscan_direct_movable 0
pginodesteal 0
slabs_scanned 0
kswapd_steal 0
kswapd_inodesteal 0
kswapd_low_wmark_hit_quickly 0
kswapd_high_wmark_hit_quickly 0
kswapd_skip_congestion_wait 0
pageoutrun 1
allocstall 0
pgrotated 0
compact_blocks_moved 0
compact_pages_moved 0
compact_pagemigrate_failed 0
compact_stall 0
compact_fail 0
compact_success 0
unevictable_pgs_culled 0
unevictable_pgs_scanned 0
unevictable_pgs_rescued 0
unevictable_pgs_mlocked 0
unevictable_pgs_munlocked 0
unevictable_pgs_cleared 0
unevictable_pgs_stranded 0
unevictable_pgs_mlockfreed 0
4. 虚拟机信息,包括进程的,线程的跟踪信息,这是用来跟踪进程和线程具体点的好地方 。
导出到当前目录 adb pull /data/anr/traces.txt .
二、分析log
1. 查找关键字
通过查找:"null" "error" " "E/","Fatal","NullPointerException","Build fingerprint:","exception","anr","DexOpt"等的错误信息,来定位问题
1)空指针问题
NullPointerException: 这个直接找到java代码,首先分析为什么会是空指针,如果逻辑上没有问题,加上一个判断就可以,也就是说如果为空的时候再次赋值或者直接返回
2).没有捕获异常问题
Exception: 能捕获的话捕获
3)ANR问题
anr:要分析原因了,看看什么导致的,然后优化代码
例子
I/dalvikvm( 1014): Wrote stack traces to '/data/anr/traces.txt'
I/Process ( 957): Sending signal. PID: 1124 SIG: 9
E/ActivityManager( 957): ANR in com.ipanel.join.appstore
E/ActivityManager( 957): Reason: Broadcast of Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=com.ipanel.join.appstore/.widget.SmallWidget1 (has extras) }
E/ActivityManager( 957): Load: 1.57 / 0.38 / 0.13
E/ActivityManager( 957): CPU usage from 6290ms to 0ms ago:
E/ActivityManager( 957): 70% 957/system_server: 1.1% user + 69% kernel / faults: 204 minor
E/ActivityManager( 957): 8.7% 1014/com.ipanel.join.home.jelly: 7.7% user + 0.9% kernel / faults: 899 minor
E/ActivityManager( 957): 0.3% 687/yaffs-bg-1: 0% user + 0.3% kernel
E/ActivityManager( 957): 0.3% 688/yaffs-bg-1: 0% user + 0.3% kernel
E/ActivityManager( 957): 0.3% 935/irkeyservice: 0% user + 0.3% kernel
E/ActivityManager( 957): 0% 890/galcore daemon : 0% user + 0% kernel
E/ActivityManager( 957): 0.1% 1076/com.ipanel.join.browser: 0.1% user + 0% kernel
E/ActivityManager( 957): 0.1% 1124/com.ipanel.join.appstore: 0.1% user + 0% kernel
E/ActivityManager( 957): 75% TOTAL: 4.7% user + 70% kernel
E/ActivityManager( 957): CPU usage from 622ms to 1169ms later:
E/ActivityManager( 957): 71% 957/system_server: 0% user + 71% kernel / faults: 2 minor
E/ActivityManager( 957): 67% 965/SurfaceFlinger: 0% user + 67% kernel
E/ActivityManager( 957): 1.9% 973/ActivityManager: 1.9% user + 0% kernel
E/ActivityManager( 957): 1.9% 991/CursorMove: 0% user + 1.9% kernel
E/ActivityManager( 957): 7.6% 1014/com.ipanel.join.home.jelly: 7.6% user + 0% kernel / faults: 31 minor
E/ActivityManager( 957): 5.7% 1119/Thread-13: 5.7% user + 0% kernel
E/ActivityManager( 957): 1.9% 1123/Thread-13: 1.9% user + 0% kernel
E/ActivityManager( 957): 76% TOTAL: 1.8% user + 72% kernel + 1.8% softirq
指定哪个java包出问题
E/ActivityManager( 957): ANR in com.ipanel.join.appstore
进程号为957发生了如下错误:com.ipanel.join.appstore 包下面 Broadcast问题
ANR原因:
E/ActivityManager( 957): Reason: Broadcast of Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=com.ipanel.join.appstore/.widget.SmallWidget1 (has extras) }
这是ANR的堆栈调用文件
I/dalvikvm( 1014): Wrote stack traces to '/data/anr/traces.txt'
通过上面的log信息分析,应该是接收一个广播消息时超时了
我们再分析虚拟机信息 ,打开/data/anr/traces.txt,可有通过adb pull /data/anr/traces.txt .
这里每一段都是一个线程 ,当然我们还是看线程号为1的主线程了。通过分析发现关键问题是这样:
搜索“DALVIK THREADS”关键词,快速定位到本应用程序的虚拟机信息日志
----- pid 1516 at 1970-01-02 08:03:07 -----
Cmd line: com.ipanel.join.appstore
DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x4001f188 self=0xd028
| sysTid=1516 nice=0 sched=3/0 cgrp=[fopen-error:2] handle=-1345017744
at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)
at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357)
at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204)
at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437)
at java.net.Socket.connect(Socket.java:983)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:74)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:298)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1018)
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:726)
at com.ipanel.join.appstore.http.DefaultHttpRequest.doGet(DefaultHttpRequest.java:35)
at com.ipanel.join.appstore.widget.AbsSmallWidget.requestApps(AbsSmallWidget.java:117)
at com.ipanel.join.appstore.widget.AbsSmallWidget.getRemoteViews(AbsSmallWidget.java:56)
其实从这句话:
at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)
基本上确认是 socket ->connect 连接超时了,导致主线程5s内没有响应从而产生ANR错误。默认的connect连接timeout时间是75s
其实解决办法就是利用非阻塞方式进行连接即可。
从CPU占用率上也可以看出是在kernel中执行堵塞住了
E/ActivityManager( 957): 75% TOTAL: 4.7% user + 70% kernel
4)Fatal问题
Fatal: 比较严重了,很多都很动态库和空指针有关,一般会接下来打印"Build fingerprint:"或”NullPointerException“
5)动态库问题
Build fingerprint: 动态库的问题,如何调试,还在学习中。。。
Log:
05-30 15:07:40.559: A/libc(623): Fatal signal 11 (SIGSEGV) at 0x00000014 (code=1), thread 1000 (Binder_5)
05-30 15:07:40.609: I/DEBUG(85): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-30 15:07:40.609: I/DEBUG(85): Build fingerprint: 'unknown'
05-30 15:07:40.609: I/DEBUG(85): pid: 623, tid: 1000, name: Binder_5 >>> system_server <<<
05-30 15:07:40.609: I/DEBUG(85): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000014
05-30 15:07:40.679: I/DEBUG(85): r0 00000000 r1 649661d6 r2 6d12fc30 r3 00000001
05-30 15:07:40.679: I/DEBUG(85): r4 6740e3d0 r5 00000000 r6 6d12fc30 r7 6740e3d0
05-30 15:07:40.679: I/DEBUG(85): r8 00000001 r9 400aff10 sl 6740e3c8 fp 00000001
05-30 15:07:40.679: I/DEBUG(85): ip 00000000 sp 6d12fbe8 lr 40054dff pc 40054e0a cpsr 60000030
05-30 15:07:40.679: I/DEBUG(85): d0 3f8000003f800000 d1 11111111c1c00000
05-30 15:07:40.679: I/DEBUG(85): d2 1a1a1a1a1a1a1a1a d3 ffffffffffffffff
05-30 15:07:40.679: I/DEBUG(85): d4 0808080808080808 d5 1111111111111111
05-30 15:07:40.679: I/DEBUG(85): d6 000000001a1a1a1a d7 0000000000000000
05-30 15:07:40.679: I/DEBUG(85): d8 0000000000000000 d9 0000000000000000
05-30 15:07:40.679: I/DEBUG(85): d10 0000000000000000 d11 0000000000000000
05-30 15:07:40.679: I/DEBUG(85): d12 0000000000000000 d13 0000000000000000
05-30 15:07:40.679: I/DEBUG(85): d14 0000000000000000 d15 0000000000000000
05-30 15:07:40.679: I/DEBUG(85): d16 000000000bebc200 d17 0000000000000000
05-30 15:07:40.679: I/DEBUG(85): d18 0000000000000000 d19 0000000000000000
05-30 15:07:40.679: I/DEBUG(85): d20 0808080808080808 d21 1111111111111111
05-30 15:07:40.679: I/DEBUG(85): d22 1a1a1a1a1a1a1a1a d23 ffffffffffffffff
05-30 15:07:40.679: I/DEBUG(85): d24 0808080808080808 d25 1111111111111111
05-30 15:07:40.679: I/DEBUG(85): d26 1a1a1a1a1a1a1a1a d27 ffffffffffffffff
05-30 15:07:40.679: I/DEBUG(85): d28 0100010001000100 d29 0100010001000100
05-30 15:07:40.679: I/DEBUG(85): d30 0000000000000000 d31 0000000000000000
05-30 15:07:40.679: I/DEBUG(85): scr 60000010
05-30 15:07:40.689: I/DEBUG(85): backtrace:
05-30 15:07:40.689: I/DEBUG(85): #00 pc 00011e0a /system/lib/libutils.so (android::VectorImpl::insertAt(void const*, unsigned int, unsigned int)+37)
05-30 15:07:40.689: I/DEBUG(85): #01 pc 0001205b /system/lib/libutils.so (android::SortedVectorImpl::add(void const*)+26)
05-30 15:07:40.689: I/DEBUG(85): #02 pc 0000dbdb /system/lib/libsensorservice.so (android::SensorDevice::activate(void*, int, int)+122)
05-30 15:07:40.689: I/DEBUG(85): #03 pc 0000e1cf /system/lib/libsensorservice.so (android::SensorFusion::activate(void*, bool)+98)
05-30 15:07:40.689: I/DEBUG(85): #04 pc 000101df /system/lib/libsensorservice.so (android::SensorService::enable(android::sp<android::SensorService::SensorEventConnection> const&, int)+68)
05-30 15:07:40.689: I/DEBUG(85): #05 pc 000102ef /system/lib/libsensorservice.so (android::SensorService::SensorEventConnection::enableDisable(int, bool)+24)
05-30 15:07:40.689: I/DEBUG(85): #06 pc 0001d1c5 /system/lib/libgui.so (android::BnSensorEventConnection::onTransact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+108)
05-30 15:07:40.689: I/DEBUG(85): #07 pc 00016e4d /system/lib/libbinder.so (android::BBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+60)
05-30 15:07:40.689: I/DEBUG(85): #08 pc 00019a29 /system/lib/libbinder.so (android::IPCThreadState::executeCommand(int)+520)
05-30 15:07:40.689: I/DEBUG(85): #09 pc 00019e51 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+184)
05-30 15:07:40.689: I/DEBUG(85): #10 pc 0001e829 /system/lib/libbinder.so
05-30 15:07:40.689: I/DEBUG(85): #11 pc 00010f47 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)
05-30 15:07:40.689: I/DEBUG(85): #12 pc 00046af3 /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)
05-30 15:07:40.689: I/DEBUG(85): #13 pc 00010aad /system/lib/libutils.so
05-30 15:07:40.689: I/DEBUG(85): #14 pc 00012b70 /system/lib/libc.so (__thread_entry+48)
05-30 15:07:40.689: I/DEBUG(85): #15 pc 000122c8 /system/lib/libc.so (pthread_create+172)
arm-eabi-addr2line这个工具通过库的trace来跟踪代码的,这个工具位于Android\prebuilt\linux-x86\toolchain\arm-eabi-4.4.3\binarm-eabi-addr2line, "source built/envsetup.sh"可以将这个工具加入到全局
查找:
lijinwei@softser30-15:~/RK4_1_B07_BRH/out/target/product/rk30sdk_joyplus/obj/SHARED_LIBRARIES/libutils_intermediates/LINKED$ arm-eabi-addr2line 00011e0a -e libutils.so
/home/lijinwei/RK4_1_B07_BRH/frameworks/native/libs/utils/VectorImpl.cpp:476
lijinwei@softser30-15:~/RK4_1_B07_BRH/out/target/product/rk30sdk_joyplus/obj/SHARED_LIBRARIES/libsensorservice_intermediates/LINKED$ ls
libsensorservice.so
lijinwei@softser30-15:~/RK4_1_B07_BRH/out/target/product/rk30sdk_joyplus/obj/SHARED_LIBRARIES/libsensorservice_intermediates/LINKED$ arm-eabi-addr2line 0000dbdb -e libsensorservice.so
/home/lijinwei/RK4_1_B07_BRH/frameworks/native/include/utils/SortedVector.h:211
template<class TYPE> inline
ssize_t SortedVector<TYPE>::add(const TYPE& item) {
return SortedVectorImpl::add(&item);
}
lijinwei@softser30-15:~/RK4_1_B07_BRH/out/target/product/rk30sdk_joyplus/obj/SHARED_LIBRARIES/libsensorservice_intermediates/LINKED$ arm-eabi-addr2line 0000e1cf -e libsensorservice.so
/home/lijinwei/RK4_1_B07_BRH/frameworks/base/services/sensorservice/SensorFusion.cpp:95
mSensorDevice.activate(ident, mMag.getHandle(), enabled);
lijinwei@softser30-15:~/RK4_1_B07_BRH/out/target/product/rk30sdk_joyplus/obj/SHARED_LIBRARIES/libsensorservice_intermediates/LINKED$ arm-eabi-addr2line 000101df -e libsensorservice.so
/home/lijinwei/RK4_1_B07_BRH/frameworks/base/services/sensorservice/SensorService.cpp:413
status_t SensorService::enable(const sp<SensorEventConnection>& connection,
int handle)
{
if (mInitCheck != NO_ERROR)
return mInitCheck;
Mutex::Autolock _l(mLock);
SensorInterface* sensor = mSensorMap.valueFor(handle);
status_t err = sensor ? sensor->activate(connection.get(), true) : status_t(BAD_VALUE);
...
}
lijinwei@softser30-15:~/RK4_1_B07_BRH/out/target/product/rk30sdk_joyplus/obj/SHARED_LIBRARIES/libsensorservice_intermediates/LINKED$ arm-eabi-addr2line 000102ef -e libsensorservice.so
/home/lijinwei/RK4_1_B07_BRH/frameworks/base/services/sensorservice/SensorService.cpp:622
status_t SensorService::SensorEventConnection::enableDisable(
int handle, bool enabled)
{
status_t err;
if (enabled) {
err = mService->enable(this, handle);
} else {
err = mService->disable(this, handle);
}
return err;
}
lijinwei@softser30-15:~/RK4_1_B07_BRH/out/target/product/rk30sdk_joyplus/obj/SHARED_LIBRARIES/libgui_intermediates/LINKED$ arm-eabi-addr2line 0001d1c5 -e libgui.so
/home/lijinwei/RK4_1_B07_BRH/frameworks/native/libs/gui/ISensorEventConnection.cpp:94
status_t BnSensorEventConnection::onTransact(
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
switch(code) {
case GET_SENSOR_CHANNEL: {
CHECK_INTERFACE(ISensorEventConnection, data, reply);
sp<BitTube> channel(getSensorChannel());
channel->writeToParcel(reply);
return NO_ERROR;
} break;
case ENABLE_DISABLE: {
CHECK_INTERFACE(ISensorEventConnection, data, reply);
int handle = data.readInt32();
int enabled = data.readInt32();
status_t result = enableDisable(handle, enabled);
可以知道是sensorservice在调enable的时候出现了问题,具体原因还得看sensorservice的管理机制,总之能定位到问题出现的地方了。
6)执行DexOpt错误
DexOpt:解压或优化extract+optimize DEX出的问题
W/dalvikvm( 1803): DexOpt: --- END 'SettingsProvider.apk' --- status=0x000a, process failed
E/dalvikvm( 1803): Unable to extract+optimize DEX from '/system/app/SettingsProvider.apk'
E/SystemServer( 1803): Failure starting Input Manager Service
E/SystemServer( 1803): java.lang.RuntimeException: Unable to get provider com.android.providers.settings.SettingsProvider: java.lang.ClassNotFoundException: com.android.providers.settings.SettingsProvider in loader dalvik.system.PathClassLoader[/system/app/SettingsProvider.apk]
E/SystemServer( 1803): at android.app.ActivityThread.installProvider(ActivityThread.java:3557)
E/SystemServer( 1803): at android.app.ActivityThread.getProvider(ActivityThread.java:3356)
从上面的打印看,是在解压或优化extract+optimize DEX的apk文件时出错了
I、没有出现magic number错误,这个原因与原子操作无关(这是一快速的加锁和解锁的轻量级操作函数)
II、执行dexopt出错,查明是服务器硬盘没空间了,导致引导文件系统的时候没有空间进行解压而失败
2.系统启动后默认其妙或随机死机情况
出现这种错误:
12-01 08:11:56.027: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:11:57.315: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:11:59.318: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:12:03.332: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:12:05.329: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.
12-01 08:12:07.216: WARN/KeyCharacterMap(312): No keyboard for id 0
12-01 08:12:07.216: WARN/KeyCharacterMap(312): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
查看内存: cat /proc/meminfo 发现空闲内存只剩下几M空间了。
请加大android系统的内存即可解决问题