問題描述:
***x 海外專案待機開機壓測時出現宕機,遙控器無響應。
問題分析:
出現問題時有產生如下backtrace:
f/libc ( 523):@@@ aborting: libc: argument is invalid heap address in dlfree addr=0x70ef03a8
#00 pc 0000f13c /system/lib/libc.so
#01 pc 00011ee3 /system/lib/libc.so (dlfree+1458)
#02 pc 0000d053 /system/lib/libc.so (free+10)
#03 pc 00008163 /system/lib/libcutils.so
#04 pc00008f93 /system/lib/libcutils.so (localtime_tz+34)
#05 pc 00048a2b /system/lib/libandroid_runtime.so (android::time::settonow()+38)
#06 pc 00063e13 /system/lib/libandroid_runtime.so
壓測一:可以看出是free乙個非法堆位址引起的,懷疑有可能呼叫時傳入了非法引數引起,所以加了debug資訊除錯,繼續壓測發現傳入引數一切正常,還是出現了上述錯誤。
//下面debug資訊正常
i/log_println( 523):android_text_format_time_settonow: time: 19000100t000000gmt+10:00(0,0,0,-1,0)
i/log_time( 523): time::settonow()seconds:0x76512bfc this->t:0x76512c10 timezone:gmt+10:00
i/log_println( 523):android_text_format_time_settonow: timezone: gmt+10:00
排除錯誤。
壓測二:懷疑上述問題和android設定時間有關,android支援gmt[+|-]hh[[:]mm]"和("america/los_angeles")兩種時區格式,
修改apk的設定時區方法為("america/los_angeles"),初步壓測未出現宕機,得出如下結論:
當給android設定的時區為"gmt[+|-]hh[[:]mm]"時,會有概率性宕機,當給android設定的時區為地區(例如:("america/los_angeles"))時則無概率性宕機問題(6臺機器壓測一天沒發現)。
壓測三:
定位code:使用arm-linux-androideabi-objdump –s d–l命令分別disassemble cutils.so和libandroid_runtime.so
例如:arm-linux-androideabi-objdump-s -d -l libcutils.so > libcutils.dis
//下面backtrace是新增debug資訊引入的,和出現問題的backtrace crash點一致
#03 pc 00008131 /system/lib/libcutils.so
#04 pc 00008fbf /system/lib/libcutils.so (mktime_tz+38)
#05 pc 00048a45 /system/lib/libandroid_runtime.so (android::time::tomillis(bool)+12)
在libcutils.dis中找到下面資訊:
00008f54:
mktime_tz():
則(mktime_tz+38) =00008f54+ 38 = 00008f8b
這裡(android::time::settonow()+38) 應該是(android::time::settonow()+0x26), 所以落點是00008f7a.
00008f8b
落在下面區間
/home/xa00087/72668_tcl/android/android/system/core/libcutils/tztime.c:1166
8f82: 4d6c ldr r5, [pc, #432] ; (9134 )
8f84: f50d 6100 add.w r1, sp, #2048 ; 0x800
8f88: 310c adds r1, #12
8f8a: 2201 movs r2, #1
8f8c: 447d add r5, pc
8f8e: 4628 mov r0,r5
8f90: f7ff f878 bl 8084
8f94: b130 cbz r0, 8fa4
tztime.c:1166 處程式碼如下:
if(tzload(gmt, sp, true) != 0
tztime.c tzload:
if (g_cachenames[i])
懷疑有reentry 導致導致free了乙個無效指標。
新增debug資訊進行壓測:
i/log_println( 521):android_text_format_time_settonow: time: 19000100t000000gmt+10:00(0,0,0,-1,0)
i/log_println( 521):android_text_format_time_settonow: time: 19000100t000000gmt+10:00(0,0,0,-1,0)
i/log_time( 521):time::settonow() seconds:0x76ab1bfc this->t:0x76ab1c10timezone:gmt+10:00
i/log_time( 521):time::settonow() seconds:0x7628dbfc this->t:0x7628dc10timezone:gmt+10:00
e/cutils ( 521): g_lastcache_before++= 3
e/cutils ( 521): g_lastcache_before++= 3
e/cutils ( 521): g_lastcache_after++= 4
e/cutils ( 521): g_lastcache_after++= 5
e/cutils ( 521): g_lastcache= 0
e/cutils ( 521): g_lastcache= 0
證明的確存在重入問題。
問題code:
g_lastcache++;
if (g_lastcache>= cache_count)
i = g_lastcache;
if(g_cachenames[i])
此題懷疑是
android
原始碼的乙個
bug,"gmt[+|-]hh[[:]mm]"格式設定時區是時序上存在問題,會存在上面介面的重入問題。
解決方案: 1.
使用("america/los_angeles")時區格式;(4臺tv壓測48小時ok)
2.呼叫settonow()時新增互斥控制;
宕機問題分析
先說說我遇到的宕機問題吧,都是與記憶體有關的 1 現象 主機板上電後,串列埠無輸出,沒反應。a 宕機原因 發現ddr部分的濾波電容脫落了好幾顆,運輸過程造成的 加上去就ok了。b 宕機原因 記憶體虛焊。c 宕機原因 記憶體vref參考電壓的,電阻值搞錯,120r給貼成0r,修改後ok。d 宕機原因 ...
android 宕機分析過程
宕機 這裡說的宕機就是凍屏,停留在乙個介面沒反應。宕機問題很少遇到,且大多不是乙個用層問題,下面簡單說下可能造成宕機的原因和分析需要資訊 宕機可能原因 1.輸入系統或者輸入驅動問題 2.系統邏輯問題或阻塞 3.su cefinger問題 4.顯示系統或lcm驅動問題 1.確認adb是否可用 2.抓取...
電腦宕機故障分析
電腦宕機故障分析 案例一 故障現象 一台配置為mmx166處理器 t2p4主機板,32mb記憶體和3.2gb硬碟的相容電腦,使用的作業系統為windows98。開機時電源指示燈亮,電源風扇也正常轉動,但計算機並沒有啟動,也沒有出現開機自檢畫面。分析及處理 據該機使用者稱,最後一次使用該機的時間是4月...