标签:svn bsp ati back 多个 完全 break 相同 ack
使用android的breakpad工具
使用这个工具需要下载Breakpad的源码,然后进行编译,编译之后会生成两个工具
二、生成转换工具
1、下载BreakPad源代码
命令行输入:svn checkout http://google-breakpad.googlecode.com/svn/trunk/ google-breakpad-read-only
2、编译工具
①进入代码路径
cd google-breakpad-read-only/
②配置环境
./configure
③编译工具
make
3、看看以下工具是否存在:
google-breakpad-read-only/src/tools/linux/dump_syms/dump_syms
google-breakpad-read-only/src/processor/minidump_stackwalk
这两个工具可以直接到csdn中去下载编译成功的
这个过程你需要编译出几个工具:minidump_stackwalk
dump_syms
等等
就是上面这两个工具
但是这里要注意不同的版本不一样,这里可以直接到csdn上去下载
这个过程你需要用ndk-build编译出.so
文件,放到你的App工程中的libs目录下,并在Java层初始化Breakpad,如以下三步:
当然,你也可以用开源的:https://github.com/yinyinnie/breakpad-for-android
https://www.cnblogs.com/willhua/p/6718379.html
其实很简单,就是找到backtrace信息中,属于我们自己的so文件报错的行。
首先要找到backtrace信息,有的手机会明确打印一行backtrace(比如我们这次使用的手机),那么这一行下面的一系列以“#两位数字 pc”开头的行就是backtrace信息了。有时可能有的手机并不会打印一行backtrace,那么只要找到一段以“#两位数字 pc ”开头的行,就可以了。
其次要找到属于自己的so文件报错的行,这就比较简单了。找到这些行之后,记下这些行中的函数地址
执行如下的命令,多个指针地址可以在一个命令中带入,以空格隔开即可
从addr2line的结果就能看到,我们拿到了我们自己的错误代码的调用关系和行数,在hello-jni.cpp的69行和61行(另外两行因为使用的是标准函数,可以忽略掉),结果和ndk-stack是一致的,说明ndk-stack也是通过addr2line来获取代码位置的。
通过addr2line命令,其实我们已经找到了我们代码中出错的位置,已经可以帮助程序员定位问题所在了。但是,这个方法只能获取代码行数,并没有显示函数信息,显得不那么“完美”,对于追求极致的程序员来说,这当然是不够的。下面我们就演示怎么来定位函数信息。
使用如下命令导出函数表:
在生成的asm文件中查找刚刚我们定位的两个关键指针00004fb4和00004f58
从这两张图可以清楚的看到(要注意的是,在不同的NDK版本和不同的操作系统中,asm文件的格式不是完全相同,但都大同小异,请大家仔细比对),这两个指针分别属于willCrash()和JNI_OnLoad()函数,再结合刚才addr2line的结果,那么这两个地址分别对应的信息就是:
相当完美,和ndk-stack得到的信息完全一致!
addr2line和堆栈中的相对地址就可以得到文件名和行号。当然前提是你要有一个debug版本、带有符号表的二进制文件。
标签:svn bsp ati back 多个 完全 break 相同 ack
原文地址:http://www.cnblogs.com/kebibuluan/p/7811133.html