android 的堆栈调试

原创 2016年08月31日 12:11:16
 最近调试android,kernel崩溃了,android的调试没有linux平台那么方便,google了一把,在网上发现可以借助堆栈信息确定出错的函数。
下面是堆栈出错时的堆栈信息:
I/HYJ***tUtility( 1050): #############get() media.maxVolume
I/DEBUG   (  661): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (  661): Build fingerprint: 'Hi3716C/Hi3716C/Hi3716C/:2.2/Sbox8800/88000121:eng/test-keys'
I/DEBUG   (  661): pid: 985, tid: 1112  >>> system_server <<<
I/DEBUG   (  661): signal 11 (SIGSEGV), fault addr deadbaad
I/DEBUG   (  661):  r0 00000000  r1 afd14879  r2 00000027  r3 00000070
I/DEBUG   (  661):  r4 afd42328  r5 00000000  r6 00000000  r7 0000a000
I/DEBUG   (  661):  r8 556f99b8  r9 45d2de6c  10 45d2de58  fp 556f9d00
I/DEBUG   (  661):  ip 00001728  sp 556f9920  lr deadbaad  pc afd11ec0  cpsr 60000030
I/DEBUG   (  661):  d0  0000000000000000  d1  3ff0000000000000
I/DEBUG   (  661):  d2  0000000050baf6de  d3  0000000000000000
I/DEBUG   (  661):  d4  00000009000000b4  d5  bf50000000000000
I/DEBUG   (  661):  d6  4079280000000000  d7  40494240424a1200
I/DEBUG   (  661):  d8  0000000000000000  d9  0000000000000000
I/DEBUG   (  661):  d10 0000000000000000  d11 0000000000000000
I/DEBUG   (  661):  d12 0000000000000000  d13 0000000000000000
I/DEBUG   (  661):  d14 0000000000000000  d15 0000000000000000
I/DEBUG   (  661):  scr 60000012
I/DEBUG   (  661): 
I/DEBUG   (  661):          #00  pc 00011ec0  /system/lib/libc.so
I/DEBUG   (  661):          #01  pc 0000bdf2  /system/lib/libc.so
I/DEBUG   (  661):          #02  pc 0000cd52  /system/lib/libc.so
I/DEBUG   (  661):          #03  pc 00020a02  /system/lib/libhi_mpi.so
I/DEBUG   (  661):          #04  pc 0001e4a6  /system/lib/libhi_mpi.so
I/DEBUG   (  661):          #05  pc 000439ba  /system/lib/libhi_mpi.so
I/DEBUG   (  661):          #06  pc 0005ab02  /system/lib/libandroid_runtime.so
I/DEBUG   (  661):          #07  pc 00010df4  /system/lib/libdvm.so
I/DEBUG   (  661):          #08  pc 0003f100  /system/lib/libdvm.so
I/DEBUG   (  661):          #09  pc 00015d58  /system/lib/libdvm.so
I/DEBUG   (  661):          #10  pc 0001c758  /system/lib/libdvm.so
I/DEBUG   (  661):          #11  pc 0001b5ec  /system/lib/libdvm.so
I/DEBUG   (  661):          #12  pc 0005649c  /system/lib/libdvm.so
I/DEBUG   (  661):          #13  pc 000422d2  /system/lib/libdvm.code = 19,value = 1
so
I/DEBUG   (  661):          #14  pc 0004dd50  /system/lib/libandroid_runtime.so
I/DEBUG   (  661):          #15  pc 0004e08e  /system/lib/libandroid_runtime.so
I/DEBUG   (  661):          #16  pc 00013440  /system/lib/libbinder.so
I/DEBUG   (  661):          #17  pc 00016c88  /system/lib/libbinder.so
I/DEBUG   (  661):          #18  pc 00016e70  /system/lib/libbinder.so
I/DEBUG   (  661):          #19  pc 0001cef8  /system/lib/libbinder.so
I/DEBUG   (  661):          #20  pc 0001c316  /system/lib/libutils.so
I/DEBUG   (  661):          #21  pc 00033eca  /system/lib/libandroid_runtime.so
I/DEBUG   (  661):          #22  pc 0001c7e8  /system/lib/libutils.so
I/DEBUG   (  661):          #23  pc 000110fc  /system/lib/libc.so
I/DEBUG   (  661):          #24  pc 00010bcc  /system/lib/libc.so
I/DEBUG   (  661): 
I/DEBUG   (  661): code around pc:
I/DEBUG   (  661): afd11ea0 2d00682d e029d1fb b12b68db c05cf8df 
I/DEBUG   (  661): afd11eb0 f8442001 4798000c e054f8df 26002227 
I/DEBUG   (  661): afd11ec0 2000f88e edbcf7fb f7fc2106 f04feeda 
I/DEBUG   (  661): afd11ed0 91035180 460aa901 96012006 f7fc9602 
I/DEBUG   (  661): afd11ee0 a905ea60 20024632 ea6af7fc eda8f7fb 
I/DEBUG   (  661): 
I/DEBUG   (  661): code around lr:
I/DEBUG   (  661): deadba8c ffffffff ffffffff ffffffff ffffffff 
I/DEBUG   (  661): deadba9c ffffffff ffffffff ffffffff ffffffff 
I/DEBUG   (  661): deadbaac ffffffff ffffffff ffffffff ffffffff 
I/DEBUG   (  661): deadbabc ffffffff ffffffff ffffffff ffffffff 
I/DEBUG   (  661): deadbacc ffffffff ffffffff ffffffff ffffffff 
I/DEBUG   (  661): 
I/DEBUG   (  661): stack:
I/DEBUG   (  661):     556f98e0  0000022f  
I/DEBUG   (  661):     556f98e4  afd148a9  /system/lib/libc.so
I/DEBUG   (  661):     556f98e8  afd425a0  /system/lib/libc.so
I/DEBUG   (  661):     556f98ec  afd4254c  /system/lib/libc.so
I/DEBUG   (  661):     556f98f0  00000000  
I/DEBUG   (  661):     556f98f4  afd158c3  /system/lib/libc.so
I/DEBUG   (  661):     556f98f8  afd14879  /system/lib/libc.so
I/DEBUG   (  661):     556f98fc  afd14879  /system/lib/libc.so
I/DEBUG   (  661):     556f9900  00000070  
I/DEBUG   (  661):     556f9904  afd42328  /system/lib/libc.so
I/DEBUG   (  661):     556f9908  00000000  
I/DEBUG   (  661):     556f990c  556f9934  
I/DEBUG   (  661):     556f9910  0000a000  [heap]
I/DEBUG   (  661):     556f9914  ad14b1b  /system/lib/libc.so
I/DEBUG   (  661):     556f9918  df002777  
I/DEBUG   (  661):     556f991c  e3a070ad  
I/DEBUG   (  661): #00 556f9920  afd438dc  /system/lib/libc.so
I/DEBUG   (  661):     556f9924  afd105a8  /system/lib/libc.so
I/DEBUG   (  661):     556f9928  afd42328  /system/lib/libc.so
I/DEBUG   (  661):     556f992c  00000004  
I/DEBUG   (  661):     556f9930  0029b1f8  [heap]
I/DEBUG   (  661):     556f9934  fffffbdf  
I/DEBUG   (  661):     556f9938  afd42328  /system/lib/libc.so
I/DEBUG   (  661):     556f993c  afd43724  /system/lib/libc.so
I/DEBUG   (  661):     556f9940  0029b1f8  [heap]
I/DEBUG   (  661):     556f9944  afd0bdf7  /system/lib/libc.so
I/DEBUG   (  661): #01 556f9948  80e820dc  /system/lib/libhi_mpi.so
I/DEBUG   (  661):     556f994c  15aed43f  
I/DEBUG   (  661):     556f9950  000013fc  
I/DEBUG   (  661):     556f9954  80e53bdb  /system/lib/libhi_mpi.so
I/DEBUG   (  661):     556f9958  80e87db4  
I/DEBUG   (  661):     556f995c  0029b1f8  [heap]
I/DEBUG   (  661):     556f9960  00000004  
I/DEBUG   (  661):     556f9964  80e87aa8  
I/DEBUG   (  661):     556f9968  80e87e68  
I/DEBUG   (  661):     556f996c  afd0cd55  /system/lib/libc.so
E/        (  672): stop swarp_rec ok
I/NetConfigProcessor( 1093): ====get===defaultnetmode==static
D/ParameterManager( 1093): ===get=== defaultnetmode==static
D/NetLinkService( 1093): ....handleMessage...netmode=static
D/Zygote  (  662): Process 985 terminated by signal (11)
I/Zygote  (  662): Exit zygote because system server (985) has terminateinit: untracked pid 1041 exited
d

PC寄存器是地址的指针,函数的调用通过这个完成,可以通过PC的值来确定调用的函数名字。红色部分是出错的库:
I/DEBUG   (  661):          #03  pc 00020a02  /system/lib/libhi_mpi.so
I/DEBUG   (  661):          #04  pc 0001e4a6  /system/lib/libhi_mpi.so
I/DEBUG   (  661):          #05  pc 000439ba  /system/lib/libhi_mpi.so
 我们将这个库拿出来借助addr2line工具可以看到出错的地方:
root@wang:/ubuntu/android-hi3716# arm-eabi-addr2line --help
Usage: arm-eabi-addr2line [option(s)] [addr(s)]
 Convert addresses into line number/file name pairs.
 If no addresses are specified on the command line, they will be read from stdin
 The options are:
  @                Read options from
  -b --target=  Set the binary file format
  -e --exe=  Set the input file name (default is a.out)
  -i --inlines           Unwind inlined functions
  -j --section=    Read section-relative offsets instead of addresses
  -s --basenames         Strip directory names
  -f --functions         Show function names
  -C --demangle[=style]  Demangle function names
  -h --help              Display this information
  -v --version           Display the program's version

arm-eabi-addr2line: supported targets: elf32-littlearm elf32-bigarm elf32-little elf32-big srec symbolsrec tekhex binary ihex
Report bugs to
root@wang:/ubuntu/android-hi3716# arm-eabi-addr2line -f -e /mnt/hgfs/Desktop/libhi_mpi.so 00020a02 0001e4a6 000439ba
SolaResamplerFree
??:0
HI_MPI_HIAO_Close
??:0
HI_UNF_SND_Close
??:0

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(3069) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
版权声明:本文为博主原创文章,转载请注明出处。

Android下打印调试堆栈方法

打印堆栈是调试的常用方法,一般出现异常时,我们可以在跑出异常时也将堆栈情况打印出来,这样十分方便错误查找。另外实际上也有一个非常有用的功能:分析代码的行为。android代码太过庞大了,完全的静态分析...
  • freshui
  • freshui
  • 2013年07月26日 10:38
  • 76727

Android下打印调试堆栈方法总结以及strace工具使用

打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错误查找。实际上还有另外一个非常有用的功能:分析代码的行为。android代码太过庞大复杂了,完全的静态分析...

Android下打印调试堆栈方法

转载自http://blog.csdn.net/freshui/article/details/9456889 打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,...

Android下打印调试堆栈方法

打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错误查找。实际上还有另外一个非常有用的功能:分析代码的行为。android代码太过庞大复杂了,完全的静态分析...

Android下 c语言 打印调试堆栈方法(一)

参考文章    http://blog.csdn.net/freshui/article/details/9456889 文章末尾提到的直接插入代码段有点错误,一开始还是需要导入一个头文件,具体解决...

Android 调试之打印堆栈

在Android调试过程中经常会出现程序出现的结果不是我们预期的结果,那就需要加Log打印调试,看调用过程是否正确,此时就需要打印程序的调用栈,特别是Android代码相当庞大,打印堆栈更有利于我们分...

Android下打印调试堆栈方法

转载自http://www.360doc.com/content/14/0904/20/9200790_407078275.shtml 打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异...

Android下打印调试堆栈方法

http://blog.csdn.net/freshui/article/details/9456889 打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分...

转载 Android下打印调试堆栈方法

打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错误查找。实际上还有另外一个非常有用的功能:分析代码的行为。android代码太过庞大复杂了,完全的静态分析...

Android下打印调试堆栈方法

打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错误查找。实际上还有另外一个非常有用的功能:分析代码的行为。android代码太过庞大复杂了,完全的静态分析...
  • vrix
  • vrix
  • 2017年12月15日 15:57
  • 11
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 的堆栈调试
举报原因:
原因补充:

(最多只允许输入30个字)