天天看点

how to debug native crash

Just share some debug method for native crash, it’s a very quickway to find out which line cause the crash in logcat,

Generally, if some native service crash, we found crash log inlogcat like this:

F/libc    ( 2258): Fatal signal 11 (SIGSEGV) at0xdeadbaad (code=1)

I/DEBUG   ( 2254): *** *** *** *** *** *** *** *** ****** *** *** *** *** *** ***

I/DEBUG   ( 2254): Build fingerprint: 'freescale/sabresd_6dq/sabresd_6dq:4.0.4/R13.3-rc3/eng.b18293.20120710.124535:user/test-keys'

I/DEBUG   ( 2254): pid: 2258, tid: 2258 >>> /system/bin/mediaserver <<<

I/DEBUG   ( 2254): signal 11 (SIGSEGV), code 1(SEGV_MAPERR), fault addr deadbaad

I/DEBUG   ( 2254):  r0 deadbaad  r100000001  r2 a0000000  r3 00000000

I/DEBUG   ( 2254):  r4 00000000  r500000027  r6 003eb620  r7 40c10f18

I/DEBUG   ( 2254):  r8 00004349  r900000000  10 000003f5  fp 00000000

I/DEBUG   ( 2254):  ip ffffffff  spbebf22a0  lr 401441b5  pc 4014091c  cpsr 60000030

....

<ignore many lines>

....

We only can see it’s maybe related to some code that we debug,but don’t know exact where and which line of code,

Actually Android have a very good tool to convert this log to amore precise log:

Give a quick example:

If you got this crash in logcat:

F/libc    ( 3043): Fatal signal 11 (SIGSEGV) at0xdeadbaad (code=1)

I/DEBUG   ( 2253): *** *** *** *** *** *** *** *** ****** *** *** *** *** *** ***

I/DEBUG   ( 2253): Build fingerprint:'freescale/sabresd_6dq/sabresd_6dq:4.0.4/R13.3-rc3/eng.b18293.20120710.124535:user/test-keys'

I/DEBUG   ( 2253): pid: 3043, tid: 3080 >>> /system/bin/mediaserver <<<

I/DEBUG   ( 2253): signal 11 (SIGSEGV), code 1(SEGV_MAPERR), fault addr deadbaad

I/DEBUG   ( 2253):  r0 deadbaad  r100000001  r2 a0000000  r3 00000000

I/DEBUG   ( 2253):  r4 00000000  r500000027  r6 00bfd370  r7 40c1ef18

I/DEBUG   ( 2253):  r8 00004349  r900000000  10 000003f5  fp 00000000

I/DEBUG   ( 2253):  ip ffffffff  sp418876a0  lr 400ff1b5  pc 400fb91c  cpsr 60000030

I/DEBUG   ( 2253):  d0 3e4ccccd00000000  d1  7e37e43c3e4ccccd

I/DEBUG   ( 2253):  d2 0000004042000000  d3  4200000000000000

I/DEBUG   ( 2253):  d4 3ff0000000000000  d5  3ff0000000000000

I/DEBUG   ( 2253):  d6 4220000041300000  d7  3e4ccccd3e4ccccd

I/DEBUG   ( 2253):  d8 000000000000685d  d9  00000000010bee7c

I/DEBUG   ( 2253):  d10 0000000000000000 d11 0000000000000000

I/DEBUG   ( 2253):  d12 0000000000000000 d13 0000000000000000

I/DEBUG   ( 2253):  d14 0000000000000000 d15 0000000000000000

I/DEBUG   ( 2253):  d16 0000000000000000 d17 3ff0000000000000

I/DEBUG   ( 2253):  d18 7e37e43c8800759c d19 0000000000000000

I/DEBUG   ( 2253):  d20 bfe0000000000000 d21 405443dab91ed79f

I/DEBUG   ( 2253):  d22 0000000000000000 d23 3f40624dd2f1a9fc

I/DEBUG   ( 2253):  d24 7fff80007fff0000 d25 3f6328e1cb8c85e0

I/DEBUG   ( 2253):  d26 0000000000000000 d27 0000000000000000

I/DEBUG   ( 2253):  d28 0000000000000000 d29 0000000000000000

I/DEBUG   ( 2253):  d30 0000000000000000 d31 0000000000000000

I/DEBUG   ( 2253):  scr 28000010

I/DEBUG   ( 2253):

I/DEBUG   (2253):          #00  pc0001791c  /system/lib/libc.so

I/DEBUG   (2253):          #01  pc00003f3e  /system/lib/libcutils.so (__android_log_assert)

I/DEBUG   (2253):          #02  pc0006c436  /system/lib/libstagefright.so(_ZN7android8OMXCodec16drainInputBufferEPNS0_10BufferInfoE)

I/DEBUG   (2253):          #03  pc0006cbc2  /system/lib/libstagefright.so(_ZN7android8OMXCodec17drainInputBuffersEv)

I/DEBUG   (2253):          #04  pc0006f570  /system/lib/libstagefright.so(_ZN7android8OMXCodec4readEPPNS_11MediaBufferEPKNS_11MediaSource11ReadOpti

onsE)

I/DEBUG   (2253):          #05  pc 00051aba /system/lib/libstagefright.so (_ZN7android11AudioPlayer5startEb)

I/DEBUG   (2253):          #06  pc0005411e  /system/lib/libstagefright.so(_ZN7android13AwesomePlayer18startAudioPlayer_lEb)

I/DEBUG   (2253):          #07  pc0005554a  /system/lib/libstagefright.so(_ZN7android13AwesomePlayer6play_lEv)

I/DEBUG   (2253):          #08  pc000558e0  /system/lib/libstagefright.so(_ZN7android13AwesomePlayer4playEv)

I/DEBUG   (2253):          #09  pc00027f4e  /system/lib/libmediaplayerservice.so (_ZN7android17StagefrightPlayer5startEv)

I/DEBUG   (2253):          #10  pc00024dda  /system/lib/libmediaplayerservice.so(_ZN7android18MediaPlayerService6decodeEixxPjPiS2_)

I/DEBUG   ( 2253):

I/DEBUG   ( 2253): code around pc:

I/DEBUG   ( 2253): 400fb8fc 4623b15c 2c006824 e026d1fbb12368db  \.#F$h.,..&..h#.

I/DEBUG   ( 2253): 400fb90c 21014a17 6011447a 4812479824002527  .J.!zD.`.G.H'%.$

I/DEBUG   ( 2253): 400fb91c f7f47005 2106ee22 eebef7f5f04fa901  .p.."..!......O.

I/DEBUG   ( 2253): 400fb92c 460a5380 93032006 94029401ea7af7f5  .S.F. ........z.

I/DEBUG   ( 2253): 400fb93c 4622a905 f7f52002 f7f4ea842106ee0e  .."F. .........!

I/DEBUG   ( 2253):

I/DEBUG   ( 2253): code around lr:

I/DEBUG   ( 2253): 400ff194 41f0e92d 4c0c4680 447c260068a56824  -..A.F.L.&|D$h.h

I/DEBUG   ( 2253): 40

You can see it’s related to which lib, and but don’t know whichline.

So, let’s go to your source code,

eg:

mydroid;

after do

$   . build/envsetup.sh

$  lunch sabresd_6dp-eng

$ development/scripts/stack

<< Copy the logcat crash log from : I/DEBUG  ( 2253): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

to the end line of this crash

>> 

<< CTRL-D To send a EOF >>>

You will got this output:

Reading symbols from /home/b33651/proj/ics/out/target/product/sabresd_6dq/symbols

pid: 3043, tid: 3080  >>> /system/bin/mediaserver<<<

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad

  r0 deadbaad  r1 00000001  r2 a0000000  r300000000

  r4 00000000  r5 00000027  r6 00bfd370  r740c1ef18

  r8 00004349  r9 00000000  10 000003f5  fp00000000

  ip ffffffff  sp 418876a0  lr 400ff1b5  pc400fb91c

Stack Trace:

  RELADDR  FUNCTION                                                                                      FILE:LINE

  0001791c  __libc_android_abort+92                                                                       /home/b33651/proj/ics/bionic/libc/unistd/abort.c:82

  00003f3e __android_log_assert+94                                                                       /home/b33651/proj/ics/system/core/liblog/logd_write.c:246

  0006c436 android::OMXCodec::drainInputBuffer(android::OMXCodec::BufferInfo*)+138                       /home/b33651/proj/ics/frameworks/base/media/libstagefright/OMXCodec.cpp:3181

  0006cbc2  android::OMXCodec::drainInputBuffers()+102                                                    /home/b33651/proj/ics/frameworks/base/media/libstagefright/OMXCodec.cpp:3125

  0006f570 android::OMXCodec::read(android::MediaBuffer**, android::MediaSource::ReadOptionsconst*)+136 /home/b33651/proj/ics/frameworks/base/media/libstagefright/OMXCodec.cpp:4020

  00051aba android::AudioPlayer::start(bool)+134                                                         /home/b33651/proj/ics/frameworks/base/media/libstagefright/AudioPlayer.cpp:93

  0005411e android::AwesomePlayer::startAudioPlayer_l(bool)+70                                           /home/b33651/proj/ics/frameworks/base/media/libstagefright/AwesomePlayer.cpp:953

  0005554a  android::AwesomePlayer::play_l()+202                                                          /home/b33651/proj/ics/frameworks/base/media/libstagefright/AwesomePlayer.cpp:888

  000558e0 android::AwesomePlayer::play()+20                                                             /home/b33651/proj/ics/frameworks/base/media/libstagefright/AwesomePlayer.cpp:837

  00027f4e android::StagefrightPlayer::start()+6                                                         /home/b33651/proj/ics/frameworks/base/media/libmediaplayerservice/StagefrightPlayer.cpp:90

  00024dda  android::MediaPlayerService::decode(int,long long, long long, unsigned int*, int*, int*)+206 /home/b33651/proj/ics/frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp:1428

So, you got more reason log.

Note:

1.   the android dir must have build once.

2.   The crash log better align with your android build environment.