0

I am looking for a native crash in my application but i cant find a tool that help me to translate the address to the function names in my library i saw this post : how to use addr2line but it seems that only works when you have a trace like this :

I/DEBUG   (   31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (   31): Build fingerprint: 'generic/sdk/generic:2.3/GRH55/79397:eng/test-keys'
I/DEBUG   (   31): pid: 378, tid: 386  >>> com.example.gltest <<<
I/DEBUG   (   31): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
I/DEBUG   (   31):  r0 001dbdc0  r1 00000001  r2 00000000  r3 00000000
I/DEBUG   (   31):  r4 00000000  r5 40a40000  r6 4051a480  r7 42ddbee8
I/DEBUG   (   31):  r8 43661b24  r9 42ddbed0  10 42ddbebc  fp 41e462d8
I/DEBUG   (   31):  ip 00000001  sp 436619d0  lr 83a12f5d  pc 8383deb4  cpsr 20000010
I/DEBUG   (   31):          #00  pc 0003deb4  /data/data/com.example.gltest/lib/libnativemaprender.so
I/DEBUG   (   31):          #01  pc 00039b76  /data/data/com.example.gltest/lib/libnativemaprender.so
I/DEBUG   (   31):          #02  pc 00017d34  /system/lib/libdvm.so

as you can see in the last 3 lines the library of your application is there : ibnativemaprender.so

and only if your library appear there the addr2line app will work

but in my trace i have this :

I/DEBUG   (16251):          #00  pc 000161c0  /system/lib/libc.so 
I/DEBUG   (16251):          #01  lr afd196f1  /system/lib/libc.so

and my library is not show there until later :

/DEBUG   (16251): stack: 
I/DEBUG   (16251):     46f0c818  afd426a4     
I/DEBUG   (16251):     46f0c81c  000b7290     
I/DEBUG   (16251):     46f0c820  00000afa    
I/DEBUG   (16251):     46f0c824  afd187b9  /system/lib/libc.so    
I/DEBUG   (16251):     46f0c828  afd42644     
I/DEBUG   (16251):     46f0c82c  afd467c4     
I/DEBUG   (16251):     46f0c830  00000000     
I/DEBUG   (16251):     46f0c834  afd196f1  /system/lib/libc.so   
I/DEBUG   (16251):     46f0c838  00000001     
I/DEBUG   (16251):     46f0c83c  46f0c86c     
I/DEBUG   (16251):     46f0c840  81b6a4a0  /data/data/com.android.ANMP/lib/mylib.so

so is there a tool that can help me? or a different way to use addr2line?

Community
  • 1
  • 1
elios264
  • 385
  • 2
  • 16

3 Answers3

1

No, not really. To do that you need to perform the search manually.

Manually, there are a three options:

  • Add debug prints to find out where and when it happens

  • Use IDA pro, (which is very expensive tool), load your library into it and look for the address 81b6a4a0, try to figure out which function it is. If you compile with debug symbols it should be easy enough.

  • Find the base address of your library, use objdump (from the NDK toolchain) to find what's in the address 81b6a4a0 (after removing base address from it).

In both last ways, if you don't find anything helpful, pull libc.so and libdvm.so from the device using adb and try to find what are the functions that appears in the stack trace, then check where do you call those functions in your code.

MByD
  • 135,866
  • 28
  • 264
  • 277
0

take a look at this. I have not yet found the time to try, so tell if if worked for you

Community
  • 1
  • 1
Blackbelt
  • 156,034
  • 29
  • 297
  • 305
0

You can use GDB to get stack traces. If you have a rooted phone or use the emulator you can enable core dumps. Then you can use GDB to examine the core dumps.

See this question for setting up GDB in Eclipse:

android how to use ndk gdb with a pure native executable

Community
  • 1
  • 1
Frohnzie
  • 3,559
  • 1
  • 21
  • 24