Linux环境下编译Google BreakPad的步骤

Linux环境下编译Google BreakPad的步骤

# 1、使用git clone下载breakpad源代码
git clone https://github.com/google/breakpad.git
# 2、下载linux_syscall_support.h系统调用头文件
git clone https://chromium.googlesource.com/linux-syscall-support
# 3、在breakpad/src/third_party下创建lss目录并拷贝到lss目录下
cd breakpad/src/third_party
mkdir lss
cp linux_syscall_support.h ../breakpad/src/third_party/lss
# 4、编译breakpad源代码,可以参考github网站:https://github.com/google/breakpad
cd src
./configure
make
# 5、编译结果产物
src/libbreakpad.a	//.a静态库
src/processor/minidump_stackwalk	//工具:从.sym符号文件和.dmp minudump文件中提取出完整信息
src/processor/minidump_dump
src/tools/linux/dump_syms/dump_syms	//工具:提取so库的.sym符号文件
src/tools/linux/md2core/minidump-2-core
等等
# 6、解析minudump文件
1) 使用./dump_syms工具提取so的符号信息
	./dump_syms    .so > libbreadpaddemo.so.sym
	
2) 给libbreadpaddemo.so.sym生成特定的目录结构
	head -n1 libbreadpaddemo.so.sym //使用head -n1命令查看libbreadpaddemo.so.sym文件第一行内容
		//输出:MODULE Linux arm64 4958HDKYUH2607A34686D5D8594UYHF libbreadpaddemo.so
	mkdir -p ./symbol/libbreadpaddemo.so/4958HDKYUH2607A34686D5D8594UYHF
		//创建子目录libbreadpaddemo.so以及子目录4958HDKYUH2607A34686D5D8594UYHF,所以需要执行上面的head -n1获取内容
	mv libbreadpaddemo.so.sym ./symbol/libbreadpaddemoe.so/4958HDKYUH2607A34686D5D8594UYHF0/
		//将符号信息libbreadpaddemo.so.sym拷贝到4958HDKYUH2607A34686D5D8594UYHF子目录下,最后结构如下:
	├── symbol
	│   └── libbreadpaddemo.so
	│       └── 4958HDKYUH2607A34686D5D8594UYHF
	│           └── libbreadpaddemo.so.sym
	
3) 调用minidump_stackwalk命令,将dmp文件和sym文件合成可读的crash.txt
	./minidump_stackwalk 4567c979-cecf-65a6-76fghytr-gteft03b.dmp ./symbol > crash.txt
	
4) crash.txt大致内容如下:
	Thread 32 (crashed)
 	0  libbreakpad-core.so + 0xe880
    	...
 	1  libbreakpad-core.so + 0xe86c
    	...
 	2  libbreakpad-core.so + 0xe8cc
    	...
# 7、可以使用Android Studio自带的minidump_stackwalk解析minidump文件的使用步骤
	1) minidump_stackwalk.exe路径在androidStudio\bin\lldb\bin下
	   执行minidump_stackwalk 4567c979-cecf-65a6-76fghytr-gteft03b.dmpp > crash.txt 得到文本内容的崩溃地址
	2) aarch64-linux-android-addr2line.exe路径在toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin目录下
	   执行aarch64-linux-android-addr2line -f -C -e libbreakpad-core.so 0xe880 0xe86c 0xe8cc 还原崩溃信息
arm-linux-androideabi-addr2line 使用方法介绍:
arm-linux-androideabi-addr2line -C -f -e ${SOPATH} ${Address}
-C -f           //打印错误行数所在的函数名称
-e                //打印错误地址的对应路径及行数
${SOPATH}         //so库路径 
${Address}        //需要转换的堆栈错误信息地址,可以添加多个,但是中间要用空格隔开
参考链接https://www.jianshu.com/p/1e15640fae7a
posted @ 2022-02-28 14:56  yongfengnice  阅读(889)  评论(0编辑  收藏  举报