mac上breakpad dmp文件脚本实现自动解析

3 篇文章 0 订阅

1,背景和准备

最近的mac项目集成了breakpad收集dmp文件,但是每次解析都要一行一行命令执行,太麻烦了,所以项目完成后,自己整了个下面的parse_crash.sh脚本,方便崩溃问题的快速解决。
当然,这里默认你已经集成了breakpad。我这边本地已经下载了breakpad的源码,Mac上编译过了,所以dump_syms、minidump_stackwalk都是有的。

使用准备:
1,需要提前确认目前文件夹下有以下文件:dump_syms、minidump_stackwalk、APPNAME.app.dSYM(这个要和崩溃发生的应用对应,编译时生成,每次发版本需要保存下来),
2,然后将dmp文件(可以是多个dmp文件)放入该文件夹,
3,执行./parse_crash.sh,
4,最终会在该文件夹下创建与dmp文件一一对应的txt文件,解析堆栈信息存放在对应文件里。

2,脚本

parse_crash.sh文件内容如下:

#!/bin/bash
function checkFileIfNotExit(){
	if [ ! -e $1 ];then
		echo $1"不存在,请确认该文件存在后再试!"
		exit
	fi
}
#替换成你自己的应用名字
APP_NAME="Langke"
APP_DYSM_FILE=$APP_NAME".app.dSYM"
APP_SYM_FILE=$APP_NAME".sym"

checkFileIfNotExit $APP_DYSM_FILE
# if [ ! -e $APP_DYSM_FILE ];then
# 	echo $APP_DYSM_FILE"不存在,请确认该文件存在后再试!"
# 	exit
# fi

CMD_DUMP_SYM_FILE="./dump_syms"
CMD_DUMP_STACK_FILE="./minidump_stackwalk"
PARSE_RESULT_SUFFIX="_parseresult.txt"

checkFileIfNotExit $CMD_DUMP_SYM_FILE
checkFileIfNotExit $CMD_DUMP_STACK_FILE

echo “/*********** dSYM文件转sym文件开始执行,可能需要等待几十秒到几分钟..... ************/”
trans=`$CMD_DUMP_SYM_FILE $APP_DYSM_FILE > $APP_SYM_FILE`
# echo "result=$?"
result=$?
echo "result=$result"
if [ $result -ne 0 ];then
	# echo $trans
	echo "执行"$CMD_DUMP_SYM_FILE"报错:dSYM文件转sym文件失败,具体信息请看上面的错误信息,请根据错误信息解决问题后再试!"
	exit
fi
echo “/*********** dSYM文件转sym文件结束 ************/”
head1=`head -n1 $APP_SYM_FILE`
#取head1中被空格分割的第四个参数
symbol_num=`echo $head1 | awk '{print $4}'`
echo $symbol_num

symbols_dir="./symbols/"$APP_NAME"/"$symbol_num
mkdir -p $symbols_dir
mv $APP_SYM_FILE $symbols_dir


for file in `ls`
do
	if echo "$file" | grep -q -E '\.dmp$'
	then
		fileName=${file/.dmp/}
		$CMD_DUMP_STACK_FILE $file ./symbols > $fileName$PARSE_RESULT_SUFFIX
	fi
done

echo "/******* dmp文档崩溃信息解析结果保存在下面文件中:*******/"
for file in `ls`
do
	if echo "$file" | grep -q -E '\.dmp$'
	then
		fileName=${file/.dmp/}
		echo $fileName$PARSE_RESULT_SUFFIX
	fi
done


3,脚本使用

我的工作文件夹如图:
在这里插入图片描述

我这边在文件夹里丢入dmp文件,终端执行脚本(./parse_crash.sh)后最后几行如下:

/******* dmp文档崩溃信息解析结果保存在下面文件中:*******/
180BFDD1-EE67-4571-97B7-859BC3B8566B_parseresult.txt

所以,我这边的180BFDD1-EE67-4571-97B7-859BC3B8566B.dmp文件解析后结果保存在文件180BFDD1-EE67-4571-97B7-859BC3B8566B_parseresult.txt里,打开如下:

Operating system: Mac OS X
                  11.5.2 20G95
CPU: amd64
     family 6 model 142 stepping 9
     4 CPUs

GPU: UNKNOWN

Crash reason:  EXC_BAD_INSTRUCTION / EXC_I386_INVOP
Crash address: 0x109040111
Process uptime: 1 seconds

Thread 0 (crashed)
 0  Langke!main [main.cpp : 161 + 0x0]
    rax = 0x00007fd1935b8b80   rdx = 0x0000000000000a56
    rcx = 0x00007fd1935b8b80   rbx = 0x000000010b59bc38
    rsi = 0x0000000000000ffe   rdi = 0x0000000080000000
    rbp = 0x00007ffee6c6a610   rsp = 0x00007ffee6c6a540
     r8 = 0x0000000000009264    r9 = 0x000000000000fa13
    r10 = 0x00000000ff7fffff   r11 = 0x000000011b28a2f0
    r12 = 0x00007ffee6c6a5c0   r13 = 0x0000000000000000
    r14 = 0x00007ffee6c6a5d8   r15 = 0x0000000000000000
    rip = 0x0000000109040111
    Found by: given as instruction pointer in context
 1  libdyld.dylib + 0x15f3d
    rbp = 0x00007ffee6c6a628   rsp = 0x00007ffee6c6a620

main.cpp 161行是我故意定义使用空指针抛出的异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值