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 ...
随机推荐
- Android使用VideoView播放本地视频及网络视频Demo
1.xm文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...
- ora-12899解决方法
在使用ORACLE的过程中,会出现各种各样的问题,各种各样的错误,其中ORA-12899就是前段时间我在将数据导入到我本地机器上的时候一直出现的问题.不过还好已经解决了这个问题,现在分享一下,解决方案 ...
- P3796 【模板】AC自动机(加强版)
P3796 [模板]AC自动机(加强版) https://www.luogu.org/problemnew/show/P3796 题目描述 有NN个由小写字母组成的模式串以及一个文本串TT.每个模式串 ...
- goto,void,extern,sizeof分析
goto: 程序的质量与goto出现的次数成反比,禁用 goto的副作用:破环了程序的结构化的顺序执行的过程,它有可能会跳过程序的应该执行的一些步骤. void: 修饰函数返回值和参数 c语言中没有定 ...
- vue的双向数据绑定实现原理
在目前的前端面试中,vue的双向数据绑定已经成为了一个非常容易考到的点,即使不能当场写出来,至少也要能说出原理.本篇文章中我将会仿照vue写一个双向数据绑定的实例,名字就叫myVue吧.结合注释,希望 ...
- ios应用内嵌h5页面数据自动变色识别为手机号码的解决方法——手机号码拨号禁用IOS手机页面数字自动识别为手机号
异常如下: ios应用内嵌h5页面,本来是设置了白色的数字,两三秒之后会自动变为黑色,然后点击的时候就会弹出是否拨号的提示: 解决方法: 添加如下meta标签,即可解决: <meta name= ...
- sizeof 4字节对齐
#include <iostream> #include<assert.h> using namespace std; typedef struct sys{ char a; ...
- f5健康检查
1.1)一般pool的健康检查 Pool member 2)检查member的多个端口,若有任意一个端口down,则切换到另一member Pool的健康检查不填,pool member的健康检查填多 ...
- java 线程Thread 技术--1.5 Executor Executors,ThreadPool,Queue
Executors : Executors ,就是一个线程工具类:大部分操作线程的方法,都可以在这个工具类中就行创建,执行,调用一些线程的方法: Executor : 用于执行和提交一个runnabl ...
- AttributeError: 'WebDriver' object has no attribute 'switchTo'
不在错误中爆发,就在错误中死亡呀. from selenium import webdriver from selenium.webdriver.support.ui import WebDriver ...