Android NDK定位.so文件crash代码位置
参考:http://blog.csdn.net/xyang81/article/details/42319789
问题: QRD8926_110202平台的Browser必现报错。(去年的项目,客户反馈问题,提case让QRD提供技术支持)
测试步骤:浏览一会新闻或其他网站(>=3分钟),然后进入百度音乐(music.baidu.com/fm)界面, 点击歌手,播放一首歌,必现报错。
F/libc (): Fatal signal (SIGBUS) at 0x00000007 (code=), thread (android.browser)
......
I/DEBUG ( 232): backtrace:
I/DEBUG ( 232): #00 pc 0016f2ac /system/lib/libwebcore.so
I/DEBUG ( 232): #01 pc 0016f3a9 /system/lib/libwebcore.so
I/DEBUG ( 232): #02 pc 0016f3cd /system/lib/libwebcore.so
I/DEBUG ( 232): #03 pc 0016f4ad /system/lib/libwebcore.so
......
需要定位libwebcore.so出现crash的代码位置。使用命令:ndk-stack -sym <path> [-dump <path>]
注意:要有源码才行。以QRD8926_110202平台为例,需要与手机版本对应的编译完成的源码,
符号表的位置\out\target\product\XXX\symbols\system\lib\
ndk-stack -sym out\target\product\msm8226\symbols\system\lib\ -dump crash.log
********** Crash dump: ********** pid: , tid: , name: android.browser >>> com.android.browser <<<
signal (SIGBUS), code (BUS_ADRALN), fault addr
Stack frame # pc 0016f2ac /system/lib/libwebcore.so: Routine WebCore::operator<(WebCore::TimerHeapElement const&, WebCore::TimerHeapElement const&) at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/platform/Timer.cpp:
Stack frame # pc 0016f3a9 /system/lib/libwebcore.so: Routine void std::__push_heap<WebCore::TimerHeapIterator, int, WebCore::TimerHeapElement>(WebCore::TimerHeapIterator, int, int, WebCore::TimerHeapElement) at QRD8926_110202/LINUX/android/external/stlport/stlport/stl/_heap.c: (discriminator )
Stack frame # pc 0016f3cd /system/lib/libwebcore.so: Routine __push_heap_aux<WebCore::TimerHeapIterator, int, WebCore::TimerHeapElement> at QRD8926_110202/LINUX/android/external/stlport/stlport/stl/_heap.c:
Stack frame # pc 0016f4ad /system/lib/libwebcore.so: Routine WebCore::TimerBase::heapPop() at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/platform/Timer.cpp:
Stack frame # pc 0016f587 /system/lib/libwebcore.so: Routine WebCore::TimerBase::heapDelete() at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/platform/Timer.cpp:
Stack frame # pc /system/lib/libwebcore.so: Routine WebCore::HTMLMediaElement::updatePlayState() at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/html/HTMLMediaElement.cpp:
Stack frame # pc 00125ad3 /system/lib/libwebcore.so: Routine WebCore::HTMLMediaElement::mediaPlayerPlaybackStateChanged(WebCore::MediaPlayer*) at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/html/HTMLMediaElement.cpp:
Stack frame # pc 00178f23 /system/lib/libwebcore.so: Routine WebCore::MediaPlayer::playbackStateChanged() at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/platform/graphics/MediaPlayer.cpp:
Stack frame # pc 00263d87 /system/lib/libwebcore.so: Routine WebCore::MediaPlayerPrivate::pause() at QRD8926_110202/LINUX/android/external/webkit/Source/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp:
Stack frame # pc 00178c97 /system/lib/libwebcore.so: Routine WebCore::MediaPlayer::pause() at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/platform/graphics/MediaPlayer.cpp:
Stack frame # pc /system/lib/libwebcore.so: Routine WebCore::HTMLMediaElement::updatePlayState() at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/html/HTMLMediaElement.cpp:
Stack frame # pc 00124df5 /system/lib/libwebcore.so: Routine WebCore::HTMLMediaElement::mediaPlayerTimeChanged(WebCore::MediaPlayer*) at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/html/HTMLMediaElement.cpp:
Stack frame # pc 00178ef3 /system/lib/libwebcore.so: Routine WebCore::MediaPlayer::timeChanged() at QRD8926_110202/LINUX/android/external/webkit/Source/WebCore/platform/graphics/MediaPlayer.cpp:
Stack frame # pc 00263fad /system/lib/libwebcore.so: Routine WebCore::MediaPlayerPrivate::onEnded() at QRD8926_110202/LINUX/android/external/webkit/Source/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp:
Stack frame # pc 000203cc /system/lib/libdvm.so (dvmPlatformInvoke+): Routine dvmPlatformInvoke at QRD8926_110202/LINUX/android/dalvik/vm/arch/arm/CallEABI.S:
Stack frame # pc 00050d8f /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+): Routine dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*) at QRD8926_110202/LINUX/android/dalvik/vm/Jni.cpp:
Stack frame # pc /system/lib/libdvm.so: Routine dalvik_mterp at QRD8926_110202/LINUX/android/dalvik/vm/mterp/out/InterpAsm-armv7-a-neon.S:
Stack frame # pc 0002e218 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+): Routine dvmInterpret(Thread*, Method const*, JValue*) at QRD8926_110202/LINUX/android/dalvik/vm/interp/Interp.cpp:
Stack frame # pc 000630a7 /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+): Routine dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool) at QRD8926_110202/LINUX/android/dalvik/vm/interp/Stack.cpp:
Stack frame # pc 0006accb /system/lib/libdvm.so: Routine Dalvik_java_lang_reflect_Method_invokeNative at QRD8926_110202/LINUX/android/dalvik/vm/native/java_lang_reflect_Method.cpp:
Stack frame # pc /system/lib/libdvm.so: Routine dalvik_mterp at QRD8926_110202/LINUX/android/dalvik/vm/mterp/out/InterpAsm-armv7-a-neon.S:
Stack frame # pc 0002e218 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+): Routine dvmInterpret(Thread*, Method const*, JValue*) at QRD8926_110202/LINUX/android/dalvik/vm/interp/Interp.cpp:
Stack frame # pc 00062de9 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+): Routine dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list) at QRD8926_110202/LINUX/android/dalvik/vm/interp/Stack.cpp:
Stack frame # pc 0004c973 /system/lib/libdvm.so: Routine CallStaticVoidMethodV at QRD8926_110202/LINUX/android/dalvik/vm/Jni.cpp:
Stack frame # pc 0004ee0b /system/lib/libandroid_runtime.so: Routine _JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...) at QRD8926_110202/LINUX/android/libnativehelper/include/nativehelper/jni.h:
Stack frame # pc 0004fa9b /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+): Routine android::AndroidRuntime::start(char const*, char const*) at QRD8926_110202/LINUX/android/frameworks/base/core/jni/AndroidRuntime.cpp:
Stack frame # pc 0000105b /system/bin/app_process
Stack frame # pc 0000dcf7 /system/lib/libc.so (__libc_init+): Routine __libc_init at QRD8926_110202/LINUX/android/bionic/libc/bionic/libc_init_dynamic.cpp:
Stack frame # pc 00000d7c /system/bin/app_process
Android NDK定位.so文件crash代码位置的更多相关文章
- FastMM 定位内存泄露的代码位置
FastMM 定位内存泄露的代码位置 开源的FastMM,使用很简单,在工程的第一行引用FastMM4即可(注意,一定要在第一个Uses的位置),可以在调试程序时提示内存泄露情况,还可以生成报告. 在 ...
- android NDK的下载-文件太大
需要FQ,建议使用VPN,下载前准备点时间配置网络环境.我的百度网盘好像有~~不过忘记地址了,改天共享,或者私聊我. 2015.4 Android 5.1 Android Studio https:/ ...
- android NDK 生成so 文件流程-ecplice
1:生成jni目录 首先说一句网上,大部分博客这么写的:打开控制台,进入项目目录,运行javah -classpath bin/classes -d jni com.example.hellojni. ...
- Android NDK编译本地文件以及引用第三方so文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS :=-llog LOCAL_MODULE := DeviceAPI LO ...
- eclipse里配置Android ndk环境,用eclipse编译.so文件
做Android NDK开发时,c代码需要用ndk-build来进行编译,而java代码则需要用Android sdk编译. 编译c代码有两种方法: 一.写好c代码后,然后用cygwin搭建ndk-b ...
- 下面就介绍下Android NDK的入门学习过程(转)
为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大. 2. 在NDK中调用第三方C/C++库,因为大部分的开源库 ...
- (转)Android: NDK编程入门笔记
转自: http://www.cnblogs.com/hibraincol/archive/2011/05/30/2063847.html 为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代 ...
- 01 android ndk入门实例之android.mk编译
前言 1 环境 android studio2.3 , window系统 2 ndk https://dl.google.com/android/repository/android-ndk-r16- ...
- Android NDK开发Crash错误定位[转]
使用 ndk-stack 的时候需要你的 lib 编译为 debug版的,通常需要下面的修改: 1. 修改 android.mk,增加,为 LOCAL_CFLAGS 增加 -g 选项 2. 修改 ap ...
随机推荐
- JMeter学习(二十八)内存溢出解决方法(转载)
转载自 http://www.cnblogs.com/yangxia-test 使用jmeter进行压力测试时遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在jme ...
- 前端基础之css介绍
CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...
- oracle中的to_number在mysql中的转换
select cast(11 as unsigned int) /*整型*/ select cast(11 as decimal(10,2)) /*浮点型*/ 注:(10,2)代表数字共十位,小数点后 ...
- Codeforces Beta Round #18 (Div. 2 Only)
Codeforces Beta Round #18 (Div. 2 Only) http://codeforces.com/contest/18 A 暴力 #include<bits/stdc+ ...
- TZOJ 3663 最长路径(floyd)
描述 网络是由很多交换机与网线组成的,网络中的信息可能会在这些网络中不断转发,给定任意两个交换机,我们需要从中找到最快的路径进行转发,我们定义转发过程中所经过的网线条数为两个交换机之间的路径长度.如果 ...
- webpack 安装,打包使用
Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换. 全局安装webpack 打开文件夹amd输入指令 npm i webpa ...
- [leetcode]694. Number of Distinct Islands你究竟有几个异小岛?
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- DataInputStream FileInputStream 区别
DataInputStream是数据输入流,读取的是java的基本数据类型. FileInputStream是从文件系统中,读取的单位是字节. FileReader 是从文件中,读取的单位是字符
- Android Studio 运行shell
public void RunCmd(String mycmd) { Process su = null; try { su = Runtime.getRuntime().exec("su& ...
- MYSQL分析慢查询
mysql慢查询的日志文件路径一般为: /var/lib/mysql/slowquery.log,具体的路径可以通过mysql配置文件(/etc/my.cnf)查询,slow_query_log_fi ...