【Mstar Andriod】【教你解析coredump】
1. 自己先在code里手动产生一个coredump,当音量调到51时,就会产生coredump MSrv_SSSound.cpp MAPI_U8 MSrv_SSSound::SetVolume(MAPI_U8 u8Vol) { printf("----->>>>u8Vol3=%d\n",u8Vol); if(u8Vol == 51) { // U8* u8Pionter = NULL; printf("----->>>>Coredump jayden\n"); // u8Pionter = 0; ASSERT(0); //1106行 } } 2. 目前学习板子的coredump在var目录下面, 修改coredump在data目录下: echo /data/%e.core.%p >/proc/sys/kernel/core_pattern cat /proc/sys/kernel/core_pattern 3. copy coredump.1075.gz到U盘里,并放入程录序编绎目:Y:\sourcecode\TVOS_L_928_3.0.5.a1\supernova\projects\symbols\applications\bin 解压: gunzip./symbols/applications/bin/coredump.1075.gz
4. 进到projects的目录下执行 arm-none-linux-gnueabi-gdbsymbols/applications/bin/tvos 5.在gdb的debug環境下指向所模擬的路徑, 與所有so lib路徑 set solib-absolute-prefixsymbols/ 6.在gdb的debug环境 (gdb)core symbols/applications/bin/coredump.1075 bt (back trace) => #0 0xb59ded5c in raise () from ./symbols/lib/libc.so.6 #1 0xb59e2838 inabort () from ./symbols/lib/libc.so.6 #2 0x00074238 inMSrv_SSSound::SetVolume (this=0xb5bb00fc <lock>, u8Vol=1 '\001',u8Vol@entry=51 '3') at./src/MSrv_SSSound.cpp:1106 #3 0x00074a9c inMSrv_SSSound::SetAudioVolume (this=<optimized out>,volSrcType=<optimized out>, u8Vol=<optimized out>) at./src/MSrv_SSSound.cpp:2559 #4 0x005581d4 inAudioManagerService::Client::setAudioVolume (this=0x12ad8a8, enSoundPath=0,volumn=51 '3') atAudioManagerService.cpp:280 #5 0x005729b8 inBnAudioManager:nTransact (this=0x12ad8a8, code=3, data=..., reply=0xbe8687c4,flags=16) atIAudioManager.cpp:1305 #6 0x000ceda8 inandroid::BBinder::transact (this=<optimized out>, code=3, data=...,reply=0xbe8687c4, flags=16) at../../../src/binder/Binder.cpp:108 #7 0x000c146c inandroid::IPCThreadState::executeCommand (this=this@entry=0x12a5df0,cmd=<optimized out>) at../../../src/binder/IPCThreadState.cpp:1084 #8 0x000c1b0c inandroid::IPCThreadState::getAndExecuteCommand (this=this@entry=0x12a5df0) at../../../src/binder/IPCThreadState.cpp:435 #9 0x000c1bd0 inandroid::IPCThreadState::joinThreadPool (this=0x12a5df0, isMain=<optimizedout>) at../../../src/binder/IPCThreadState.cpp:489 #10 0x00062884 in main (argc=1, argv=0xbe868ae4) atmain.cpp:1517 (gdb) 根据GDB分析出,/src/MSrv_SSSound.cpp:1106 MSrv_SSSound::SetAudioVolume里 也就是1106行的 ASSERT(0); ,即断言!删掉即可!
|