Android ndk-stack tool

----------------------

Introduction:

-------------

This document describes the 'ndk-stack' tool that is distributed with

the Android NDK, since release r6.

Overview:

---------

'ndk-stack' is a simple tool that allows you to filter stack traces as they

appear in the output of 'adb logcat' and replace any address inside a shared

library with the corresponding <source-file>

:

<line-number>

values.

In a nutshell, it will translate something like:

I/DEBUG ( 31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

I/DEBUG ( 31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'

I/DEBUG ( 31): pid: 351, tid: 351 %gt;%gt;%gt; /data/local/ndk-tests/crasher <<<

I/DEBUG ( 31): signal 11 (SIGSEGV), fault addr 0d9f00d8

I/DEBUG ( 31): r0 0000af88 r1 0000a008 r2 baadf00d r3 0d9f00d8

I/DEBUG ( 31): r4 00000004 r5 0000a008 r6 0000af88 r7 00013c44

I/DEBUG ( 31): r8 00000000 r9 00000000 10 00000000 fp 00000000

I/DEBUG ( 31): ip 0000959c sp be956cc8 lr 00008403 pc 0000841e cpsr 60000030

I/DEBUG ( 31): #00 pc 0000841e /data/local/ndk-tests/crasher

I/DEBUG ( 31): #01 pc 000083fe /data/local/ndk-tests/crasher

I/DEBUG ( 31): #02 pc 000083f6 /data/local/ndk-tests/crasher

I/DEBUG ( 31): #03 pc 000191ac /system/lib/libc.so

I/DEBUG ( 31): #04 pc 000083ea /data/local/ndk-tests/crasher

I/DEBUG ( 31): #05 pc 00008458 /data/local/ndk-tests/crasher

I/DEBUG ( 31): #06 pc 0000d362 /system/lib/libc.so

I/DEBUG ( 31):

Into the more readable output:

********** Crash dump: **********

Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'

pid: 351, tid: 351 >>> /data/local/ndk-tests/crasher <<<

signal 11 (SIGSEGV), fault addr 0d9f00d8

Stack frame #00 pc 0000841e /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13

Stack frame #01 pc 000083fe /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5

Stack frame #02 pc 000083f6 /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9

Stack frame #03 pc 000191ac /system/lib/libc.so

Stack frame #04 pc 000083ea /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14

Stack frame #05 pc 00008458 /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19

Stack frame #06 pc 0000d362 /system/lib/libc.so

Usage:

------

To do this, you will first need a directory containing symbolic versions of your

application's shared libraries. If you use the NDK build system (i.e. ndk-build),

then these are always located under $PROJECT_PATH/obj/local/<ab>, where

<ab> stands for your device's ABI (i.e. 'armeabi' by default).

You can feed the logcat text either as direct input to the program, e.g.:

adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi

Or you can use the -dump option to specify the logcat as an input file, e.g.:

adb logcat > /tmp/foo.txt

$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump foo.txt

** IMPORTANT **:

The tool looks for the initial line containing starts in the logcat output,

i.e. something that looks like:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

When copy/pasting traces, don't forget this line from the traces, or

ndk-stack won't work correctly.

TODO:

-----

A future version of 'ndk-stack' will try to launch 'adb logcat' and select the

library path automatically. For now, you'll have to do these steps manually.

As of now, ndk-stack doesn't handle libraries that don't have debug information

in them. It may be useful to try to detect the nearest function entry point to

a given PC address (e.g. as in the libc.so example above).

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. 缓存统一管理工具类--android
  2. Android修改默认浏览器为其他浏览器
  3. 判断当前是电脑还是手机打开网页
  4. Android使用adb命令对手机进行截屏保存到
  5. Android APP OPS移除应用程序项目的修改
  6. SharedPreferences存储数据的使用方法(转)
  7. Android垂直跑马灯效果
  8. Android开源项目分类汇总【老外汇总版本
  9. 在android中获取系统正在运行的进程
  10. Android应用程序键盘(Keyboard)消息处理机