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).
相关推荐
### Android NDK-Stack 使用说明 #### 一、概述 在使用Cocos2d-x、JNI及Android NDK进行开发时,经常会遇到调试困难的问题。尤其是对于C/C++代码的调试,由于涉及到本地代码与Java层之间的交互,使得调试过程变得...
ndk-stack 是 Android NDK 中的一个命令行工具,用于分析和调试Native 代码。它可以将崩溃的日志信息转换成可读的调用栈信息,从而帮助开发者快速定位和解决问题。 ndk-stack 的使用方法 在使用 ndk-stack 之前,...
在Android开发中,"tracktrack"通常指的是追踪和分析应用运行过程中的特定事件,如内存分配、CPU使用率或异常情况。"android-ndk-tracktrack-analyzer.py"就是这样一个工具,它能解析由NDK生成的跟踪日志,从而帮助...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的开发工具,它允许开发者使用C++和其他原生编程语言编写应用的部分或全部代码。这个“android-ndk-r26b-linux.zip”文件是NDK的一个...
Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用工具,它允许开发者使用C和C++编写部分应用代码,以利用设备的硬件性能或实现更底层的操作。在“android-ndk-r8dab....
Android NDK(Native Development Kit)是Google为Android平台提供的一套工具集,允许开发者使用C、C++等原生代码来编写部分应用模块,从而提高应用程序的性能和效率。JNI(Java Native Interface)是Java平台的标准...
Android NDK(Native Development Kit)是用于开发Android应用中的本地部分(如C或C++代码)的一个工具集。在Android应用开发过程中,程序崩溃(Crash)是一个常见的问题,它影响用户体验,并给开发者带来调试的挑战...
一个用于分析Android本地代码crash的工具 出现crash以后,用logcat -s DEBUG把crash的log打印保存下来,例如crash_log.txt; 然后执行 ndk-stack -sym 符号所在的目录 -dump crash_log.txt; 例如ndk-stack -sym out/...
Android NDK(Native Development Kit)是Google推出的一款用于在Android平台上进行原生代码开发的工具集,它允许开发者使用C++和其他本地语言编写高性能、低级别的应用程序组件。在Android应用开发中,NDK扮演着至...
《CC2530NDK.rar_Z-STACK SensorDemo》是一个关于无线传感器网络开发的实践教程,主要基于CC2530芯片和Z-STACK协议栈。CC2530是一款由Texas Instruments(TI)公司生产的高效能、低功耗的微控制器,广泛应用于无线...
总结来说,处理Android应用中的C++崩溃问题,关键在于正确使用`ndk-stack`工具解析crash堆栈,结合`mapping.txt`文件将地址转换为源代码位置。通过这种方式,开发者可以迅速定位到问题的根源,提高故障排查的效率。...
Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用工具集。它允许开发者在Android应用中使用C和C++代码,从而实现高性能计算、图形处理或者利用已有的C/C++库。这篇入门...
- **性能分析**:使用Android Profiler和NDK提供的工具,如`ndk-stack`,可以对本地代码进行性能分析和错误排查。 5. **最佳实践** - **最小化本地代码**:只在必要时使用NDK,因为本地代码更难调试且不支持动态...
Android NDK(Native Development Kit)是Google为Android平台提供的一款用于开发原生代码的应用程序工具集,它允许开发者使用C和C++等低级语言编写性能敏感或需要访问硬件的代码。在Android应用开发中,NDK常用于...
- **定义**:Android NDK (Native Development Kit) 是一套工具集,它提供了必要的工具和文档来帮助开发者使用 C 或 C++ 编写原生应用层代码。尽管 Java 仍然是 Android 应用开发的主要语言,但 NDK 提供了额外的...
在Android系统中,理解和分析调用堆栈(call stack)对于开发者来说至关重要,尤其是在调试和性能优化时。本文将深入探讨如何在Android环境下为不同语言(C语言、C++、Java以及内核空间)添加并打印调用堆栈信息。 ...
将 Boost 移植到 Android 平台可以让开发者在 Android 应用程序中利用这些强大的功能。下面我们将详细介绍如何在 Ubuntu 操作系统下使用 arm-linux-gcc 编译 Boost 1.5.1 版本,以便在 Android 设备上使用。 **目的...
NDK(Native Development Kit)是Google提供的一套工具,用于在Android应用中进行C/C++原生代码的开发,它允许开发者利用高性能的原生代码来实现特定功能,例如图形处理、物理模拟等。 首先,我们需要了解NDK的安装...
Android Studio JNI_NDK开发实例是Android应用开发中的一个重要领域,涉及到Java与原生代码(C/C++)的交互。JNI(Java Native Interface)是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。NDK...