Android 分析log

一、分析前的準備工作
1. 查看內存
[ruby] view plaincopy
  1. #cat /proc/meminfo  
  2. MemTotal:         903640 kB //總計物理內存的大小  
  3. MemFree:          455024 kB //可用內存有多少  
  4. Buffers:           10928 kB //磁盤緩存內存的大小  
  5. Cached:           189004 kB  
  6. SwapCached:            0 kB  
  7. Active:           184708 kB  
  8. Inactive:         158564 kB  
  9. Active(anon):     143364 kB  
  10. Inactive(anon):      244 kB  
  11. Active(file):      41344 kB  
  12. Inactive(file):   158320 kB  
  13. Unevictable:           0 kB  
  14. Mlocked:               0 kB  
  15. HighTotal:        155648 kB  
  16. HighFree:            304 kB  
  17. LowTotal:         747992 kB  
  18. LowFree:          454720 kB  
  19. SwapTotal:             0 kB  
  20. SwapFree:              0 kB  
  21. Dirty:                 0 kB  
  22. Writeback:             0 kB  
  23. AnonPages:        143332 kB  
  24. Mapped:            61624 kB  
  25. Shmem:               276 kB  
  26. Slab:              12776 kB  
  27. SReclaimable:       5040 kB  
  28. SUnreclaim:         7736 kB  
  29. KernelStack:        5128 kB  
  30. PageTables:         9012 kB  
  31. NFS_Unstable:          0 kB  
  32. Bounce:                0 kB  
  33. WritebackTmp:          0 kB  
  34. CommitLimit:      451820 kB  
  35. Committed_AS:    7976472 kB  
  36. VmallocTotal:     122880 kB  
  37. VmallocUsed:       49792 kB  
  38. VmallocChunk:      46020 kB  

2. 查看進程信息,能夠實時顯示系統中各個進程的資源佔用狀況,類似於 Windows 的任務管理器
[ruby] view plaincopy
  1. #top -n 1 -d 1 -m 30 -t  
  2. User 13%, System 10%, IOW 0%, IRQ 0%  
  3. User 22 + Nice 9 + Sys 24 + Idle 170 + IOW 0 + IRQ 0 + SIRQ 1 = 226  
  4.   
  5.   
  6.   PID   TID PR CPU% S     VSS     RSS PCY UID      Thread          Proc  
  7.  1762  1762  0   5% R   1264K    664K     root     top             top  
  8.  1323  1340  0   3% S 676928K  43096K  bg u0_a55   MMHandlerThread com.tencent.mm  
  9.     9     9  1   2% S      0K      0K     root     ksoftirqd/1  
  10.  1323  1325  0   1% S 676928K  43096K  bg u0_a55   GC              com.tencent.mm  
  11.   583   737  1   0% S 667232K  30480K  fg u0_a44   droid.phasebeam com.android.phasebeam  
  12.   298   326  1   0% S 728032K  45172K  fg system   ActivityManager system_server  
  13.   298   321  0   0% S 728032K  45172K  fg system   SensorService   system_server  
  14.   960   960  0   0% S 661188K  33004K  fg u0_a55   tencent.mm:push com.tencent.mm:push  
  15.   843   843  1   0% S 660692K  38672K  fg u0_a52   ndroid.systemui com.android.systemui  
  16.    84   250  1   0% S  62188K   5688K  fg system   VSyncThread     /system/bin/surfaceflinger  
  17.   583   749  1   0% S 667232K  30480K  fg u0_a44   droid.phasebeam com.android.phasebeam  
  18.   960   984  0   0% S 661188K  33004K  fg u0_a55   MMHandlerThread com.tencent.mm:push  
  19.    22    22  0   0% S      0K      0K     root     kinteractiveup  
  20.    84    84  1   0% S  62188K   5688K  fg system   surfaceflinger  /system/bin/surfaceflinger  
  21.    84   253  1   0% S  62188K   5688K  fg system   Binder_1        /system/bin/surfaceflinger  
  22.  1143  1528  0   0% S 665552K  33132K  bg u0_a23   AirPlayServer   com.waxrain.airplayer  
  23.    84   245  1   0% S  62188K   5688K  fg system   SurfaceFlinger  /system/bin/surfaceflinger  
  24.    53    53  0   0% S      0K      0K     root     rknand_buffer  
  25.  1323  1323  0   0% S 676928K  43096K  bg u0_a55   com.tencent.mm  com.tencent.mm  
  26.   298   637  0   0% S 728032K  45172K  fg system   Binder_4        system_server  
  27.   298   647  0   0% S 728032K  45172K  fg system   Binder_5        system_server  
  28.  1323  1330  0   0% S 676928K  43096K  bg u0_a55   Compiler        com.tencent.mm  
  29.    84   864  0   0% S  62188K   5688K  fg system   Binder_3        /system/bin/surfaceflinger  
  30.   298   304  1   0% S 728032K  45172K  fg system   Compiler        system_server  
  31.     3     3  0   0% S      0K      0K     root     ksoftirqd/0  
  32.  1323  1335  0   0% S 676928K  43096K  fg u0_a55   Binder_2        com.tencent.mm  
  33.    51    51  0   0% S      0K      0K     root     binder  
  34.    52    52  0   0% S    352K    184K     root     ueventd         /sbin/ueventd  
  35.    54    54  1   0% S      0K      0K     root     mtdblock0  
  36.    55    55  1   0% S      0K      0K     root     mtdblock1  

3. 虛擬內存的查看,目前還看不懂
[ruby] view plaincopy
  1. #cat /proc/vmstat  
  2. nr_free_pages 112977  
  3. nr_inactive_anon 61  
  4. nr_active_anon 36183  
  5. nr_inactive_file 39628  
  6. nr_active_file 10351  
  7. nr_unevictable 0  
  8. nr_mlock 0  
  9. nr_anon_pages 36180  
  10. nr_mapped 15427  
  11. nr_file_pages 50046  
  12. nr_dirty 0  
  13. nr_writeback 0  
  14. nr_slab_reclaimable 1455  
  15. nr_slab_unreclaimable 2005  
  16. nr_page_table_pages 2281  
  17. nr_kernel_stack 689  
  18. nr_unstable 0  
  19. nr_bounce 0  
  20. nr_vmscan_write 0  
  21. nr_writeback_temp 0  
  22. nr_isolated_anon 0  
  23. nr_isolated_file 0  
  24. nr_shmem 69  
  25. nr_dirtied 5665  
  26. nr_written 5413  
  27. nr_anon_transparent_hugepages 0  
  28. nr_dirty_threshold 26869  
  29. nr_dirty_background_threshold 6717  
  30. pgpgin 197593  
  31. pgpgout 26455  
  32. pswpin 0  
  33. pswpout 0  
  34. pgalloc_normal 389068  
  35. pgalloc_high 61026  
  36. pgalloc_movable 0  
  37. pgfree 563265  
  38. pgactivate 10977  
  39. pgdeactivate 0  
  40. pgfault 450191  
  41. pgmajfault 1011  
  42. pgrefill_normal 0  
  43. pgrefill_high 0  
  44. pgrefill_movable 0  
  45. pgsteal_normal 0  
  46. pgsteal_high 0  
  47. pgsteal_movable 0  
  48. pgscan_kswapd_normal 0  
  49. pgscan_kswapd_high 0  
  50. pgscan_kswapd_movable 0  
  51. pgscan_direct_normal 0  
  52. pgscan_direct_high 0  
  53. pgscan_direct_movable 0  
  54. pginodesteal 0  
  55. slabs_scanned 0  
  56. kswapd_steal 0  
  57. kswapd_inodesteal 0  
  58. kswapd_low_wmark_hit_quickly 0  
  59. kswapd_high_wmark_hit_quickly 0  
  60. kswapd_skip_congestion_wait 0  
  61. pageoutrun 1  
  62. allocstall 0  
  63. pgrotated 0  
  64. compact_blocks_moved 0  
  65. compact_pages_moved 0  
  66. compact_pagemigrate_failed 0  
  67. compact_stall 0  
  68. compact_fail 0  
  69. compact_success 0  
  70. unevictable_pgs_culled 0  
  71. unevictable_pgs_scanned 0  
  72. unevictable_pgs_rescued 0  
  73. unevictable_pgs_mlocked 0  
  74. unevictable_pgs_munlocked 0  
  75. unevictable_pgs_cleared 0  
  76. unevictable_pgs_stranded 0  
  77. 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:要分析原因了,看看什麼導致的,然後優化代碼
例子
[ruby] view plaincopy
  1. I/dalvikvm( 1014): Wrote stack traces to '/data/anr/traces.txt'  
  2.  I/Process ( 957): Sending signal. PID: 1124 SIG: 9  
  3.  E/ActivityManager( 957): ANR in com.ipanel.join.appstore  
  4.  E/ActivityManager( 957): Reason: Broadcast of Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=com.ipanel.join.appstore/.widget.SmallWidget1 (has extras) }  
  5.  E/ActivityManager( 957): Load: 1.57 / 0.38 / 0.13  
  6.  E/ActivityManager( 957): CPU usage from 6290ms to 0ms ago:  
  7.  E/ActivityManager( 957): 70% 957/system_server: 1.1% user + 69% kernel / faults: 204 minor  
  8.  E/ActivityManager( 957): 8.7% 1014/com.ipanel.join.home.jelly: 7.7% user + 0.9% kernel / faults: 899 minor  
  9.  E/ActivityManager( 957): 0.3% 687/yaffs-bg-1: 0% user + 0.3% kernel  
  10.  E/ActivityManager( 957): 0.3% 688/yaffs-bg-1: 0% user + 0.3% kernel  
  11.  E/ActivityManager( 957): 0.3% 935/irkeyservice: 0% user + 0.3% kernel  
  12.  E/ActivityManager( 957): 0% 890/galcore daemon : 0% user + 0% kernel  
  13.  E/ActivityManager( 957): 0.1% 1076/com.ipanel.join.browser: 0.1% user + 0% kernel  
  14.  E/ActivityManager( 957): 0.1% 1124/com.ipanel.join.appstore: 0.1% user + 0% kernel  
  15.  E/ActivityManager( 957): 75% TOTAL: 4.7% user + 70% kernel  
  16.  E/ActivityManager( 957): CPU usage from 622ms to 1169ms later:  
  17.  E/ActivityManager( 957): 71% 957/system_server: 0% user + 71% kernel / faults: 2 minor  
  18.  E/ActivityManager( 957): 67% 965/SurfaceFlinger: 0% user + 67% kernel  
  19.  E/ActivityManager( 957): 1.9% 973/ActivityManager: 1.9% user + 0% kernel  
  20.  E/ActivityManager( 957): 1.9% 991/CursorMove: 0% user + 1.9% kernel  
  21.  E/ActivityManager( 957): 7.6% 1014/com.ipanel.join.home.jelly: 7.6% user + 0% kernel / faults: 31 minor  
  22.  E/ActivityManager( 957): 5.7% 1119/Thread-13: 5.7% user + 0% kernel  
  23.  E/ActivityManager( 957): 1.9% 1123/Thread-13: 1.9% user + 0% kernel  
  24.  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”關鍵詞,快速定位到本應用程序的虛擬機信息日誌
  
[ruby] view plaincopy
  1. ----- pid 1516 at 1970-01-02 08:03:07 -----  
  2.   Cmd line: com.ipanel.join.appstore  
  3.   DALVIK THREADS:  
  4.   (mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)  
  5.   "main" prio=5 tid=1 NATIVE  
  6.   | group="main" sCount=1 dsCount=0 obj=0x4001f188 self=0xd028  
  7.   | sysTid=1516 nice=0 sched=3/0 cgrp=[fopen-error:2] handle=-1345017744  
  8.   at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)  
  9.   at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357)  
  10.   at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204)  
  11.   at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437)  
  12.   at java.net.Socket.connect(Socket.java:983)  
  13.   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:74)  
  14.   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)  
  15.   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:298)  
  16.   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)  
  17.   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285)  
  18.   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267)  
  19.   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1018)  
  20.   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:726)  
  21.   at com.ipanel.join.appstore.http.DefaultHttpRequest.doGet(DefaultHttpRequest.java:35)  
  22.   at com.ipanel.join.appstore.widget.AbsSmallWidget.requestApps(AbsSmallWidget.java:117)  
  23.   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:
[ruby] view plaincopy
  1. 05-30 15:07:40.559: A/libc(623): Fatal signal 11 (SIGSEGV) at 0x00000014 (code=1), thread 1000 (Binder_5)  
  2.         05-30 15:07:40.609: I/DEBUG(85): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***  
  3.         05-30 15:07:40.609: I/DEBUG(85): Build fingerprint: 'unknown'  
  4.         05-30 15:07:40.609: I/DEBUG(85): pid: 623, tid: 1000, name: Binder_5  >>> system_server <<<  
  5.         05-30 15:07:40.609: I/DEBUG(85): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000014  
  6.         05-30 15:07:40.679: I/DEBUG(85):     r0 00000000  r1 649661d6  r2 6d12fc30  r3 00000001  
  7.         05-30 15:07:40.679: I/DEBUG(85):     r4 6740e3d0  r5 00000000  r6 6d12fc30  r7 6740e3d0  
  8.         05-30 15:07:40.679: I/DEBUG(85):     r8 00000001  r9 400aff10  sl 6740e3c8  fp 00000001  
  9.         05-30 15:07:40.679: I/DEBUG(85):     ip 00000000  sp 6d12fbe8  lr 40054dff  pc 40054e0a  cpsr 60000030  
  10.         05-30 15:07:40.679: I/DEBUG(85):     d0  3f8000003f800000  d1  11111111c1c00000  
  11.         05-30 15:07:40.679: I/DEBUG(85):     d2  1a1a1a1a1a1a1a1a  d3  ffffffffffffffff  
  12.         05-30 15:07:40.679: I/DEBUG(85):     d4  0808080808080808  d5  1111111111111111  
  13.         05-30 15:07:40.679: I/DEBUG(85):     d6  000000001a1a1a1a  d7  0000000000000000  
  14.         05-30 15:07:40.679: I/DEBUG(85):     d8  0000000000000000  d9  0000000000000000  
  15.         05-30 15:07:40.679: I/DEBUG(85):     d10 0000000000000000  d11 0000000000000000  
  16.         05-30 15:07:40.679: I/DEBUG(85):     d12 0000000000000000  d13 0000000000000000  
  17.         05-30 15:07:40.679: I/DEBUG(85):     d14 0000000000000000  d15 0000000000000000  
  18.         05-30 15:07:40.679: I/DEBUG(85):     d16 000000000bebc200  d17 0000000000000000  
  19.         05-30 15:07:40.679: I/DEBUG(85):     d18 0000000000000000  d19 0000000000000000  
  20.         05-30 15:07:40.679: I/DEBUG(85):     d20 0808080808080808  d21 1111111111111111  
  21.         05-30 15:07:40.679: I/DEBUG(85):     d22 1a1a1a1a1a1a1a1a  d23 ffffffffffffffff  
  22.         05-30 15:07:40.679: I/DEBUG(85):     d24 0808080808080808  d25 1111111111111111  
  23.         05-30 15:07:40.679: I/DEBUG(85):     d26 1a1a1a1a1a1a1a1a  d27 ffffffffffffffff  
  24.         05-30 15:07:40.679: I/DEBUG(85):     d28 0100010001000100  d29 0100010001000100  
  25.         05-30 15:07:40.679: I/DEBUG(85):     d30 0000000000000000  d31 0000000000000000  
  26.         05-30 15:07:40.679: I/DEBUG(85):     scr 60000010  
  27.         05-30 15:07:40.689: I/DEBUG(85): backtrace:  
  28.         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)  
  29.         05-30 15:07:40.689: I/DEBUG(85):     #01  pc 0001205b  /system/lib/libutils.so (android::SortedVectorImpl::add(void const*)+26)  
  30.         05-30 15:07:40.689: I/DEBUG(85):     #02  pc 0000dbdb  /system/lib/libsensorservice.so (android::SensorDevice::activate(void*, int, int)+122)  
  31.         05-30 15:07:40.689: I/DEBUG(85):     #03  pc 0000e1cf  /system/lib/libsensorservice.so (android::SensorFusion::activate(void*, bool)+98)  
  32.         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)  
  33.         05-30 15:07:40.689: I/DEBUG(85):     #05  pc 000102ef  /system/lib/libsensorservice.so (android::SensorService::SensorEventConnection::enableDisable(int, bool)+24)  
  34.         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)  
  35.         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)  
  36.         05-30 15:07:40.689: I/DEBUG(85):     #08  pc 00019a29  /system/lib/libbinder.so (android::IPCThreadState::executeCommand(int)+520)  
  37.         05-30 15:07:40.689: I/DEBUG(85):     #09  pc 00019e51  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+184)  
  38.         05-30 15:07:40.689: I/DEBUG(85):     #10  pc 0001e829  /system/lib/libbinder.so  
  39.         05-30 15:07:40.689: I/DEBUG(85):     #11  pc 00010f47  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+114)  
  40.         05-30 15:07:40.689: I/DEBUG(85):     #12  pc 00046af3  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+66)  
  41.         05-30 15:07:40.689: I/DEBUG(85):     #13  pc 00010aad  /system/lib/libutils.so  
  42.         05-30 15:07:40.689: I/DEBUG(85):     #14  pc 00012b70  /system/lib/libc.so (__thread_entry+48)  
  43.         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"可以將這個工具加入到全局

查找:
[java] view plaincopy
  1. 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  
  2. /home/lijinwei/RK4_1_B07_BRH/frameworks/native/libs/utils/VectorImpl.cpp:476  
  3.   
  4. lijinwei@softser30-15:~/RK4_1_B07_BRH/out/target/product/rk30sdk_joyplus/obj/SHARED_LIBRARIES/libsensorservice_intermediates/LINKED$ ls  
  5. libsensorservice.so  
  6. 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   
  7. /home/lijinwei/RK4_1_B07_BRH/frameworks/native/include/utils/SortedVector.h:211  
  8. template<class TYPE> inline  
  9. ssize_t SortedVector<TYPE>::add(const TYPE& item) {  
  10.     return SortedVectorImpl::add(&item);  
  11. }  
  12.   
  13. 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            
  14. /home/lijinwei/RK4_1_B07_BRH/frameworks/base/services/sensorservice/SensorFusion.cpp:95  
  15. mSensorDevice.activate(ident, mMag.getHandle(), enabled);  
  16.   
  17.   
  18. 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              
  19. /home/lijinwei/RK4_1_B07_BRH/frameworks/base/services/sensorservice/SensorService.cpp:413  
  20. status_t SensorService::enable(const sp<SensorEventConnection>& connection,  
  21.         int handle)  
  22. {  
  23.     if (mInitCheck != NO_ERROR)  
  24.         return mInitCheck;  
  25.   
  26.   
  27.     Mutex::Autolock _l(mLock);  
  28.     SensorInterface* sensor = mSensorMap.valueFor(handle);  
  29.     status_t err = sensor ? sensor->activate(connection.get(), true) : status_t(BAD_VALUE);  
  30. ...  
  31. }  
  32.   
  33. 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              
  34. /home/lijinwei/RK4_1_B07_BRH/frameworks/base/services/sensorservice/SensorService.cpp:622  
  35. status_t SensorService::SensorEventConnection::enableDisable(  
  36.         int handle, bool enabled)  
  37. {  
  38.     status_t err;  
  39.     if (enabled) {  
  40.         err = mService->enable(this, handle);  
  41.     } else {  
  42.         err = mService->disable(this, handle);  
  43.     }  
  44.     return err;  
  45. }  
  46.   
  47. 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   
  48. /home/lijinwei/RK4_1_B07_BRH/frameworks/native/libs/gui/ISensorEventConnection.cpp:94  
  49. status_t BnSensorEventConnection::onTransact(  
  50.     uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)  
  51. {  
  52.     switch(code) {  
  53.         case GET_SENSOR_CHANNEL: {  
  54.             CHECK_INTERFACE(ISensorEventConnection, data, reply);  
  55.             sp<BitTube> channel(getSensorChannel());  
  56.             channel->writeToParcel(reply);  
  57.             return NO_ERROR;  
  58.         } break;  
  59.         case ENABLE_DISABLE: {  
  60.             CHECK_INTERFACE(ISensorEventConnection, data, reply);  
  61.             int handle = data.readInt32();  
  62.             int enabled = data.readInt32();  
  63.             status_t result = enableDisable(handle, enabled);  


   可以知道是sensorservice在調enable的時候出現了問題,具體原因還得看sensorservice的管理機制,總之能定位到問題出現的地方了。         
6)執行DexOpt錯誤
DexOpt:解壓或優化extract+optimize DEX出的問題
[ruby] view plaincopy
  1. W/dalvikvm( 1803): DexOpt: --- END 'SettingsProvider.apk' --- status=0x000a, process failed  
  2. E/dalvikvm( 1803): Unable to extract+optimize DEX from '/system/app/SettingsProvider.apk'  
  3. E/SystemServer( 1803): Failure starting Input Manager Service  
  4. 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]  
  5. E/SystemServer( 1803): at android.app.ActivityThread.installProvider(ActivityThread.java:3557)  
  6. E/SystemServer( 1803): at android.app.ActivityThread.getProvider(ActivityThread.java:3356)  
  從上面的打印看,是在解壓或優化extract+optimize DEX的apk文件時出錯了
  I、沒有出現magic number錯誤,這個原因與原子操作無關(這是一快速的加鎖和解鎖的輕量級操作函數)
  II、執行dexopt出錯,查明是服務器硬盤沒空間了,導致引導文件系統的時候沒有空間進行解壓而失敗

2.系統啓動後默認其妙或隨機死機情況
出現這種錯誤:
  
[ruby] view plaincopy
  1. 12-01 08:11:56.027: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.  
  2.   12-01 08:11:57.315: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.  
  3.   12-01 08:11:59.318: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.  
  4.   12-01 08:12:03.332: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.  
  5.   12-01 08:12:05.329: WARN/SharedBufferStack(312): waitForCondition(LockCondition) timed out (identity=19, status=0). CPU may be pegged. trying again.  
  6.   12-01 08:12:07.216: WARN/KeyCharacterMap(312): No keyboard for id 0  
  7.   12-01 08:12:07.216: WARN/KeyCharacterMap(312): Using default keymap: /system/usr/keychars/qwerty.kcm.bin  

  查看內存: cat /proc/meminfo 發現空閒內存只剩下幾M空間了。
  請加大android系統的內存即可解決問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章